-
PHPのErrorExceptionクラスとは?エラーハンドリングの基本と実装例を解説
はじめにPHPのExceptionクラスは、Throwableインターフェースを実装しています。そして、ErrorExceptionクラスはこのExceptionクラスを継承したクラスです。ErrorExceptionは、本来であれば無視されてしまうエラー(NoticeやWarningなど)を捕捉して処理したい場合に、明示的にスローするために用意されています。これにより、PHPの標準的なエラー報告の仕組みを例外処理の仕組みに統合することができます。PHPの定義済みエラー定数PHPのコアには、以下のような定義済みエラー定数が用意されています。ErrorExceptionのseverity(重大度
-
PHPのDivisionByZeroError(ゼロ除算エラー)とは?発生条件と例外処理のコード例で解説
はじめにDivisionByZeroError クラスは、ArithmeticError クラスのサブクラスです。このエラーは、除算処理において分母の値がゼロになった場合に発生します。また、剰余演算子(%)の第2オペランドが0の場合や、intdiv() 関数の第2引数に0を指定した場合にも発生します。DivisionByZeroErrorの発生例最初の例では、剰余演算子 % を使って10と0の剰余演算を実行し、意図的にDivisionByZeroErrorを発生させています。try-catchブロックで例外を捕捉し、エラーメッセージを表示します。コード例1:剰余演算子(%)の場合<?ph
-
PHPのCompileErrorとは?概要・構文・使い方をわかりやすく解説
はじめに PHP 7.3 以降では、新しい例外クラスである CompileError が追加されました。このクラスは Error クラスを継承しており、以前は致命的エラー(fatal error)として処理され、スクリプト全体が停止していた一部のコンパイルエラーを、例外として捕捉できるようになった点が大きな特徴です。 この変更の影響を受けるのが、token_get_all() 関数です。この関数がスローする可能性のあるコンパイル系のエラーは、CompileError として扱われます。 token_get_all() 関数は、Zend 字句スキャナー(lexical scanner)を利用して
-
PHPのAssertionErrorとは?assert()によるアサーション失敗時のエラー処理を解説
はじめにAssertionError クラスは、Error クラスのサブクラスです。このエラーは、assert() が FALSE を返した場合、つまりアサーション(表明)が失敗したときにスローされます。assert() は与えられたアサーションが真か偽かをチェックし、偽であった場合に AssertionError をスローします。assert() 関数は以下のように定義されています。構文PHP 5 および PHP 7assert ( mixed $assertion [, string $description ] ) : boolPHP 7 のみassert ( mixed $assert
-
PHPのArithmeticErrorクラスとは?発生条件と対処法を解説
はじめにArithmeticError クラスは、Error クラスを継承したエラークラスです。このエラーは、特定の数学的な演算を実行する際に発生する可能性があります。代表的な発生シナリオとしては、以下の2つが挙げられます。ビットシフト演算を負の数で実行しようとした場合intdiv() 関数の呼び出し結果が、整数の正当な範囲(境界値)を超える場合ArithmeticErrorの発生例1:負の数によるビットシフト次の例では、ビットシフト演算子に負のオペランドを指定しています。この操作は無効であるため、ArithmeticError がスローされます。コード例<?php try {
-
PHPのArgumentCountErrorとは?発生原因と対処法を実例付きで解説
はじめに PHPでは、ユーザー定義関数やメソッドを呼び出す際に渡す引数の数が、関数定義で宣言されている数よりも少ない場合、「ArgumentCountError」がスローされます。ArgumentCountErrorクラスはTypeErrorクラスを継承しており、PHP 7.1以降で導入された例外です。 ArgumentCountErrorの基本的な例 次の例では、2つの引数を受け取るユーザー定義関数add()を定義しています。しかし、呼び出し時に必要な数より少ない引数しか渡さないとArgumentCountErrorが発生するため、try-catchブロックで捕捉して適切に処理します。
-
PHPのArrayAccessインターフェースとは?オブジェクトを配列のように操作する方法
はじめにPHPには、オブジェクトに対して配列のようなアクセスを可能にするための仕組みとして、ArrayAccessインターフェースが用意されています。このインターフェースを実装したクラスでは、内部に持つ配列型のプロパティを、オブジェクト生成時に外部へ公開することなく、$obj[key] のような配列構文で直接読み書きできるようになります。ArrayAccessインターフェースは、以下の4つの抽象メソッドを定義しています。構文(Syntax)ArrayAccess { /* メソッド */ abstr
-
PHPのClosureクラスとは?無名関数を操作する主要メソッドと使い方
はじめにPHPにおける無名関数(匿名関数、ラムダとも呼ばれます)は、Closure クラスのオブジェクトとして返されます。このクラスには、無名関数をさらに細かく制御するための便利なメソッドが用意されています。クラスの構文Closure { /* メソッド */ private __construct ( void ) public static bind ( Closure $closure , object $newthis [, mixed $ne
-
PHPジェネレータークラス入門:yieldで実現する省メモリな反復処理
はじめにforeach などのループ構文で大規模なデータコレクションを走査すると、大量のメモリを消費し、処理にも相当な時間がかかります。ジェネレータ(Generator) を使えば、こうしたオーバーヘッドなしにデータセットを反復処理できます。ジェネレータ関数は通常の関数とよく似ていますが、return 文の代わりに yield キーワードを使用します。yield は繰り返し実行されることで、反復処理に渡す値を順番に生成します。yield キーワードはジェネレータ機構の中核となる存在です。使い方は return に似ていますが、関数の実行を終了させるわけではありません。次の反復値を返したうえで、
-
PHPのIteratorインターフェースとは?基本構文と実装方法を解説
はじめにIteratorインターフェースは、抽象インターフェースであるTraversableを継承しています。PHPにはSPLイテレータと呼ばれる数多くの組み込みイテレータが用意されており、ArrayIteratorやDirectoryIteratorなど、日常的なさまざまな処理に活用できます。ユーザー定義クラスでIteratorインターフェースを実装する場合は、インターフェースで定義されている抽象メソッドをすべて実装しなければなりません。構文Iterator extends Traversable { /* メソッド */ &nbs
-
PHPのIteratorAggregateインターフェース徹底解説!外部イテレータの作成方法
はじめにIteratorAggregateインターフェースは、抽象インターフェースであるTraversableを継承しています。このインターフェースをクラスに実装することで、そのクラスに対して外部イテレータ(External Iterator)を作成できるようになります。IteratorAggregateには、getIterator()という抽象メソッドが1つだけ定義されています。構文IteratorAggregate extends Traversable { /* メソッド */ abstrac
-
PHPのSerializableインターフェースとは?カスタムシリアライズの実装方法を解説
はじめにPHPには、独自のシリアライズ処理(カスタムシリアライズ)を実装したクラスを作成するための Serializable インターフェースが用意されています。PHPの組み込み関数である serialize() は、ほとんどの値を保存可能な形式にシリアライズできますが、ユーザー定義クラスのオブジェクトはそのままではシリアライズできません。Serializableインターフェースを実装することで、この制限を回避できます。Syntax(構文)Serializable { /* メソッド */ abstract public serialize ( void ) : string
-
PHPのThrowableインターフェース徹底解説:ErrorとExceptionの共通基盤
はじめにPHP 7で導入されたThrowableインターフェースは、throw文で投げることができるすべてのオブジェクト(ErrorおよびExceptionを含む)の基底となるインターフェースです。組み込みクラスやユーザー定義クラスの派生元であるErrorクラスとExceptionクラスは、いずれもこのThrowableインターフェースを実装しています。Throwableインターフェースには、以下の抽象メソッドが定義されています。構文Throwable { /* メソッド */ abstract p
-
PHPのTraversableインターフェイスとは?特徴と使い方を解説
はじめにTraversableはPHPにおける抽象インターフェイス(abstract interface)であり、そのためクラスが直接実装(implements)することはできません。一般的には、Traversableを継承しているIteratorインターフェイスまたはIteratorAggregateインターフェイスを実装し、そのクラスがforeach構文で走査(トラバース)可能かどうかを判定するために使われます。一方で、このインターフェイスを実装している一部の組み込みクラスは、Iterator系インターフェイスを明示的に実装していなくても、foreachループでそのまま使用することができま
-
PHPのWeakReferenceクラスとは?ウィークリファレンスの基本と使い方
はじめにウィークリファレンス(弱い参照)を使うと、オブジェクトへの参照を保持しながらも、そのオブジェクトの破棄を妨げないようにすることができます。この特性を活かせば、キャッシュのような構造を実装可能です。ウィークリファレンスは通常の参照と似ていますが、ガベージコレクタによるオブジェクトの回収を妨げないという点が大きく異なります。対象のオブジェクトへの強い参照が存在しなくなった場合、そのオブジェクトは直ちにメモリから解放されます。この仕組みにより、メモリに関する問題を引き起こすことなく、キャッシュの持つ利点のほとんどを実現できます。WeakReferenceクラスはPHP 7.4で導入されました
-
PHPの$argc変数とは?コマンドライン引数の数を取得する方法
はじめに$argc は、PHPスクリプトがコマンドラインから実行された場合にのみ利用できるスーパーグローバル変数です。Webサーバーのドキュメントルート経由(HTTPリクエスト)で実行した場合は使用できません。この変数は整数型で、現在実行中のスクリプトに渡されたコマンドライン引数の個数を表します。スクリプトを実行する際には必ずファイル名自体も引数として入力されるため、$argc の最小値は 1 となります。また、php.ini の register_argc_argv ディレクティブが無効になっている場合、この変数は利用できない点に注意が必要です。$argc の基本的な使い方以下のサンプルスク
-
PHPの$argvとは?コマンドライン引数の取得方法と使い方を解説
はじめにPHPスクリプトをコマンドラインから実行する際、$argvというスーパーグローバル配列には、スクリプトに渡された引数が格納されます。配列の最初の要素$argv[0]には必ずスクリプト名そのものが入るため、実際の引数は$argv[1]以降に順番に格納されていきます。なお、php.iniのregister_argc_argvディレクティブが無効(Off)になっている場合、この変数は利用できません。CLI環境では通常デフォルトで有効になっていますが、Webサーバー経由での実行時は設定を確認しておくと安心です。$argvの基本構造$argvは配列として動作し、以下のような構造になっています。$
-
PHPの$_COOKIEスーパーグローバル変数とは?基本から使い方まで解説
はじめにPHPのスーパーグローバル変数$_COOKIEは、HTTPリクエストとともにクライアントから送信されたCookieの情報を、連想配列として現在のスクリプトに渡すための変数です。かつては$HTTP_COOKIE_VARSという変数にも同じ情報が格納されていましたが、こちらはスーパーグローバルではなく、現在では非推奨(deprecated)となっているため使用しないようにしましょう。Cookie(クッキー)とは?Cookieとは、Webサーバーがクライアント(ユーザーのブラウザ)側のコンピュータに保存する小さなテキストファイルのことです。主にユーザーの追跡や状態管理のために利用されます。P
-
PHPの$_ENVとは?環境変数の取得と設定方法をgetenv()・putenv()とともに解説
はじめに$_ENVは、PHPにおけるスーパーグローバルな連想配列の一つです。現在実行中のスクリプトから利用可能な環境変数が格納されています。かつては$HTTP_ENV_VARSという変数にも同じ情報が含まれていましたが、こちらはスーパーグローバルではなく、すでに非推奨(deprecated)となっています。環境変数はPHPのグローバル名前空間に取り込まれます。これらの変数の多くは、PHPパーサーが動作しているシェルによって提供されるため、プラットフォームごとに環境変数の一覧は異なる点に注意が必要です。また、PHPがサーバーモジュールまたはCGIプロセッサとして動作している場合は、CGI関連の変
-
PHPの$_FILES変数とは?ファイルアップロードの仕組みと使い方を解説
はじめに$_FILES は、PHPにあらかじめ定義されているグローバル変数(スーパーグローバル)の一つで、HTTP POSTメソッド経由でアップロードされたファイルの情報を格納する連想配列です。なお、$HTTP_POST_FILES という変数にも同じ情報が含まれていますが、こちらはスーパーグローバルではなく、現在では非推奨(deprecated)となっているため使用しないようにしましょう。$_FILES配列に含まれる主な要素$_FILES 配列には、アップロードされたファイルに関する以下の5つの情報が格納されます。$_FILES[file][name] — アップロードされたファイルの元のフ