PHP4 までは発生箇所でその都度エラー状況を監視するか、全てのエラーを特定の関数に一極集中するかの二者択一でした。
PHP5 からは例外の導入により try
~ catch
構文が利用できるようになりましたが、PHP4 までのエラー処理フローは依然として残っており、両者は同居、と言うより混在しています。
set_error_handler — ユーザ定義のエラーハンドラ関数を設定する
Fatal error (致命的エラー) の箇所で、ユーザー定義のエラーハンドラ関数が呼び出されないため、スクリプトのシャットダウン関数を利用して処理します。 シャットダウン関数は register_shutdown_function 関数で指定します。シャットダウン関数からエラーハンドラを呼びだせています。
例外が発生していることがわかりますので、 次のように try-catch で例外を捕捉します。エラーハンドラと同様な構文の set_exception_handler 関数がありますので、これが利用できないか検討するため、 set_exception_handler 関数でデフォルトの例外処理ハンドラをセットすると次のようになります。
例外処理の構文
まずは構文です。
<?php try { throw new Exception('エラーが発生しました'); } catch (Exception $e) { } ?>
tryブロック内で何か例外が発生した場合、catchブロック内へ処理が飛び、catchブロック内の処理が終了後、以降の処理へ進みます。
tryブロック内で何も起こらなかった場合、tryブロック内の処理が全て終了後、catchブロックは無視され、以降の処理へ進みます。
で、ここで「例外が発生する」と表現しているのは、「例外クラスをthrowする」ことを指しています。
throw new Exception(・・・)とすることで、その時点でtryブロック内の処理が中断し、catchへ飛びます。
なので、基本的には明示的にthrowしない限りはtry~catchの意味はありません。
http://www.shigeweb.jp/php/project_p/?page=exception§ion=php5oop
http://keicode.com/cgi/php-error-handling.php
http://memopad.bitter.jp/w3c/php/php_error.html
http://www.objective-php.net/basic/exception