============================================================================ function eh_error_handler( $num, $str, $file, $line ) { return false;// execute php default error handler } set_error_handler( "eh_error_handler" ); このエラーハンドラが実行された後、falseを返せば、phpのディフォルトのエラーハンドラも実行される。 trueを返せば、phpのディフォルトのエラーハンドラは実行されないが、プログラムの実行はエラーを 起こした次の行から続く。 プログラムの実行を止めてしまうfatalエラー場合、このハンドラは呼ばれない。 プログラムはshutdown_functionを実行して終了する。 ============================================================================ function eh_shutdown_function() { $error = error_get_last(); if ( $error["type"] == E_ERROR ) { ..................... ..................... ..................... ..................... } } register_shutdown_function( "eh_shutdown_function" ); shutdown_functionはプログラムが終了する際に、必ず実行される。 エラーに限定されているわけではない。このハンドラ内で、エラーを取得するためには、 error_get_last()でエラーが起きたかどうかを調べる。 これが、fatalエラーをトラップするための唯一の方法である。 ============================================================================ function eh_exception_handler( $e ) { echo $e->getMessage(); echo $e->getFile(); echo $e->getLine(); echo get_class( $e ); } set_exception_handler( "eh_exception_handler" ); throw new Exception('Division by zero.'); UnhandleのExceptionをTrapする。 ============================================================================