例外とエラー
例:$num = 0; try { echo 1/$num; } catch (Exception $e){ echo $e->getMessage();//并不能执行到这里 } //说明try{}catch{}是用于捕获异常的,而错误是不能捕获到的。 //手动抛出异常进行捕获 $num = 0; try { if($num == 0){ //通过if判断可以处理错误,手动抛出异常(如何实现自动捕获错误呢,需结合三个php内置函数) throw new Exception('除数为零'); } echo 1/$num; } catch (Exception $e){ echo $e->getMessage(); }
とは例外
プログラムの実行中に予期しない状況が発生した場合に発生することは許可されますが (異常な状況が発生することは望ましくありません)、弊社の規定によれば、これは異常な状況です。通常のロジック 発生すべきでないにもかかわらず発生するエラーは、コンパイル エラーや構文エラーではなく、ロジックおよびビジネス プロセスのエラーです。エラーとは
PHPスクリプト自体の問題であり、構文やサーバー環境が間違っていることがほとんどです。これにより、コンパイラが検査に合格しなかったり、動作しなくなったりすることがあります。警告と通知はどちらもエラーですが、レベルが異なり、try-catch ではエラーを捕捉できません。エラーの分類
#致命的なエラー: 致命的なエラー (スクリプトが終了しました)E_ERROR // 致命的な実行エラー。エラーは回復できず、スクリプトの実行は一時停止されます
E_CORE_ERROR // 初期化中PHP 起動時のプロセス 致命的エラー
E_COMPILE_ERROR // Zend スクリプト エンジンによって E_ERROR が生成されたかのようなコンパイル時の致命的エラー
E_USER_ERROR // カスタム エラー メッセージ。 PHP 関数 trigger_error を使用する場合と同様 (エラー タイプは E_USER_ERROR に設定されます)
解析エラー: コンパイル時の解析エラー、構文エラー (スクリプトの実行が終了します)
E_PARSE // コンパイル時の構文解析error
Warning Error: 警告エラー (プロンプト情報のみが表示され、スクリプトは操作を終了しません)
E_WARNING // 実行時警告 (致命的ではないエラー)。
E_CORE_WARNING // PHP の初期化起動中に発生した警告 (致命的ではないエラー)。
E_COMPILE_WARNING //コンパイル警告
E_USER_WARNING //ユーザーによって生成された警告メッセージ
Notice Error: 通知エラー (通知情報のみが表示され、スクリプトの実行は終了しません) )
E_NOTICE // 実行時通知。スクリプトがエラーとして表示される可能性のある状況に遭遇したことを示します
E_USER_NOTICE // ユーザーによって生成された通知情報。
5 クラスは ERROR レベルのエラーを生成し、PHP プログラムの終了を直接引き起こします。 ERROR = E_ERROR | e){} 例外をキャッチするには、エラーをキャッチする 3 つの関数を使用する必要があります。
// 注册一个会在php中止时执行的函数 register_shutdown_function('myShutdownFunction'); function myShutdownFunction() { if ($error = error_get_last()) { var_dump('<b>register_shutdown_function: Type:' . $error['type'] . ' Msg: ' . $error['message'] . ' in ' . $error['file'] . ' on line ' . $error['line'] . '</b>'); } }//注册异常处理函数, 没有捕获处理的异常,将统一再这里处理 set_exception_handler('myException'); function myException($exception) { var_dump("<b>set_exception_handler: Exception: " . $exception->getMessage() . '</b>'); }
//注册错误处理函数 set_error_handler('myError'); function myError($type, $message, $file, $line) { //var_dump('<b>set_error_handler: ' . $type . ':' . $message . ' in ' . $file . ' on ' . $line . ' line .</b><br />'); throw new Exception($message); }
##すべてのエラーをキャプチャする原則
set_error_handler() から、一部のエラーはキャプチャできるが、システム レベルの E_ERROR、E_PARSE およびその他のエラーはキャプチャできないことがわかります。 , ですが、この部分は register_shutdown_function() でキャプチャできます。したがって、この 2 つを組み合わせることで、非常に優れた機能を生み出すことができます。
概要
例外とエラーを自動的にキャプチャする 3 つの関数
set_error_handler () は一部のみをキャプチャできますError
register_shutdown_function () を set_error_handler () 関数と組み合わせると、すべてのエラーをキャッチできます
set_Exception_handler () は例外をキャッチするために使用されますerror_get_last () で、最後にエラー メッセージを終了します
エラーをキャプチャする関数で、手動で例外をスローします。つまり、set_Exception_handler を実装してエラーをキャプチャします。
推奨チュートリアル: 「
PHP ビデオ チュートリアル」
以上がPHP の例外とエラー処理の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。