スクリプトのエラー処理を行うユーザ関数 (error_handler)を設定します。定義済のエラー ハンドラまたはエラーの際に FALSE を返します。この関数は、実行時の エラー処理をユーザが定義するために使用します。例えば、致命的なエ ラーを発生した場合や、ある条件のもとに (trigger_error()を使用して)エラーを発生する必 要がある場合にデータやファイルを消去する必要があるようなアプリケー ションがこの場合にあたります。
ユーザ関数の引数は2つ、エラーコードとエラーを記述する文字列です。 PHP 4.0.2 からオプションのパラメータが3つ追加されています。これら は、エラーが発生したファイル名、エラーが発生した行、発生したエラー のコンテキスト(エラーが発生した場所でのアクティブなシンボルテーブ ルを指す配列)です。
以下の例では、エラーを発生することにより内部例外の処理を表示し、 ユーザ定義関数によりこれを処理します。
例 1 set_error_handler()および trigger_error()によるエラー処理
|
vector a Array ( [0] => 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11 ) ---- vector b - a warning (b = log(PI) * a) <b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br> Array ( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281 ) ---- vector c - an error <b>ERROR</b> [512] Incorrect input vector, array of values expected<br> NULL ---- vector d - fatal error <b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br> Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br> Aborting...<br> |
PHP の標準のエラーハンドラは完全にバイパスされることに注意して下 さい。error_reporting() の設定は影響せず、どの ような場合でもユーザが設定したエラーハンドラがコールされます。た だし、この場合でもハンドラで error_reporting() のカレントの値を読み、適当に動作させることは可能です。エラーを発 生した命令の前に @ エラー制御演算子 が付加されている場合、この値は 0 となることには注意を要し ます。
ユーザハンドラ関数は、要すれば die() をコール する責任があることにも注意を要します。エラーハンドラ関数がリター ンした場合、スクリプトの実行は、エラーを発生した命令の次の命令に 継続されます。
error_reporting(), restore_error_handler(), trigger_error(), user_error()も参照下さい。