PHP エラー処理フロー

PHP は歴史的にエラー処理フローが統一されていません。
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://php.net/manual/ja/book.errorfunc.php
  http://www.shigeweb.jp/php/project_p/?page=exception&section=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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值