ホームページ >バックエンド開発 >PHPチュートリアル >PHP 例外処理、エラースローおよびエラー コールバック関数、例外処理コールバック関数_PHP チュートリアル
1. エラー、例外レベル定数テーブル
エラー: コンパイル中に見つからない実行時エラー。割り当てられていない変数を出力するには、エコーを使用することをお勧めします。この種の問題により、プログラムまたはロジックが続行できなくなり、中断する必要が生じます。
例外: ロジックは実行可能ですが、アプリケーションのシナリオを満たさないことがよくあります。そのため、例外は主に次のようなものに依存します。コード作成者は、判断後にスローし、例外をキャッチして、プログラムを中断せずにこれらの状況に対処できるようにプログラム フローを変更する必要があります。PHP の例外とエラーの定義は、特に古いバージョンの PHP ではあまり明確ではないようです。
录 エラーとログレコードの値
1 E_ERROR (整数) 致命的な実行時エラー。 |このタイプのエラーは、メモリ割り当てによって引き起こされる問題など、通常は回復不可能な状況です。その結果、スクリプトが終了し、実行が続行されなくなります。
4 E_PARSE (整数) コンパイル時の構文解析エラー。 |解析エラーはパーサーによってのみ生成されます。
8 E_NOTICE (整数) 実行時通知。 スクリプトがエラーとして表示される可能性のある状況に遭遇することを示しますが、正常に実行できるスクリプトに同様の通知がある場合もあります。
16 E_CORE_ERROR(整数) PHP の初期化および起動中に致命的なエラーが発生しました。 |このエラーは E_ERROR に似ていますが、PHP エンジン コアによって生成されます。 PHP 4 以降
32 E_CORE_WARNING(integer) PHP 初期化起動時に発生した警告 (致命的ではないエラー)。 |E_WARNING に似ていますが、PHP エンジン コアによって生成されます。 PHP 4 以降
64 E_COMPILE_ERROR(整数) 致命的なコンパイル時エラー。 |E_ERROR に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4 以降
128 E_COMPILE_WARNING(整数) コンパイル時間の警告 (致命的ではないエラー)。 |E_WARNING に似ていますが、Zend スクリプト エンジンによって生成されます。 PHP 4 以降
256 E_USER_ERROR(整数) ユーザーによって生成されたエラー メッセージ。 |E_ERROR に似ていますが、ユーザーがコード内で PHP 関数trigger_error()を使用して生成されます。 PHP 4 以降
512 E_USER_WARNING(整数) ユーザーによって生成された警告メッセージ。 |E_WARNING に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4 以降
1024 E_USER_NOTICE(整数) ユーザーが生成した通知情報。 |E_NOTICE に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 4 以降
2048 E_STRICT (整数) コード変更に対する PHP の提案を有効にします。 | PHP 5 以降、コードに最適な相互運用性と上位互換性があることを確認します
4096 E_RECOVERABLE_ERROR(整数) 捕捉できる致命的なエラー。 |これは、潜在的に危険なエラーが発生したが、まだ PHP エンジンが不安定な状態になっていないことを示します。エラーがユーザー定義のハンドルで捕捉されない場合 (「 set_error_handler()) を参照してください。これは E_ERROR となり、スクリプトは終了します。 PHP 5.2.0以降
8192 E_DEPRECATED(整数) 実行時通知。 | 有効にすると、将来のバージョンで正しく動作しなくなる可能性があるコードに対して警告が表示されます。 PHP 5.3.0以降
16384 E_USER_DEPRECATED(整数) 家計資産が低い場合の警告メッセージ。 |E_DEPRECATED に似ていますが、コード内で PHP 関数trigger_error()を使用してユーザーによって生成されます。 PHP 5.3.0以降
30719 E_ALL (整数) E_STRICT すべてのエラーおよび警告メッセージ。
*PHP 5.3.x では 30719、PHP 5.2.x では 6143、以前は 2047
2. error_reporting() と try-catch がスローされる
error_reporting() 関数は、(パラメーターが渡されない場合) スクリプトが処理する例外を取得および設定できます (すべての例外を処理する必要はありません。たとえば、E_CORE_WARNING、E_NOTICE、E_DEPRECATED は無視できます)。この設定は php を上書きします。 ini error_reporting オプションで定義された例外処理設定。
例:
リーリー
try-catch は、クラスの自動ロード関数 __autoload() 内では有効になりません。
try-catch は、trigger_error() によって引き起こされるエラーなど、例外をキャッチするために使用されます。
リーリー
例:
リーリー
例外クラス構造: ほとんどのメソッドは書き換えが禁止されています(最終)
リーリー
拡張例外クラス
try-catch には複数の catch 句を含めることができます。最初の catch 句から始めて、句内の例外変数の型が throw ステートメントによってスローされた例外の型と一致する場合、その句が実行され、他の catch は実行されません。例外はすべての例外クラスの基本クラスであるため、異なる例外の種類に応じて異なる処理メソッドを使用する必要がある場合は、Exception タイプの catch を使用する必要があります。句は最後に置かれます。
Exception はすべての例外の基本クラスであり、実際のニーズに応じて例外クラスを拡張できます
リーリー
catch 句で例外の種類を決定したり、コードなどの情報に基づいて例外を処理するかどうかを決定したりできます。catch 句で記述したコードがキャッチした例外を適切に処理できない場合は、catch 句内で続行できます。 . 例外をスローします。
3. 例外コールバック関数
リーリー
例外コールバック関数は、set_error_handler のコールバック関数のように true を返して例外を解消することはできません。そのため、コールバック関数が例外を処理しても、後続のコードは実行されません。 try-catch を使用する必要があります。try-catch 内でキャッチされた例外は Exception_handler をトリガーしません。
ただし、例外があります。スローされた例外が処理されない場合でも、スクリプト終了コールバック関数は実行できます。
register_shutdown_function(コールバック関数名[,引数1,引数2,...]);
例:
<span>function</span><span> shutdownfunction(){ </span><span>echo</span> 'script is end'<span>; } </span><span>register_shutdown_function</span>("shutdownfunction");
因为 shutdownfunction() 在脚本结束时被执行,所以 这个回调函数之内可以调用脚本中任意位置的函数,即使该函数定义在 错误抛出位置之后(函数定义是在 脚本编译期完成的)。
四、trigger_error(string errorMsg[,int user_error_type])
该函数用于主动触发一个错误: user_error_type 只能是 E_ALL、E_USER_ERROR、 E_USER_WARNING、 E_USER_NOTICE 或其组合的值。
注册 error (包括系统抛出的 Error 和 用户抛出的 Error )的处理函数和消除 error:
<span>set_error_handler</span>(<span>callback</span> functionName[,user_error_type]); <span>//</span><span> 为 trigger_error() 设置一个回调函数来处理错误,包括系统抛出的错误和用户使用 trigger_error() 函数触发的错误。</span>
可选参数 user_error_type :
如果设定此参数,则 trigger_error 抛出的错误类型符合 在user_error_type 的定义范围才能触发回调函数。
这个值的设置类似于 error_reporting() 函数 。
第一个参数(callbeck functionName):
一个函数名,该函数 可以有 5 个参数,其中前 2 个必选,依次是:
trigger_error 抛出的 user_error_type、trigger_error 抛出的 errorMsg、抛出错误的文件的绝对路劲、抛出错误的行号、抛出错误时的上下文环境 (一个数组,包含了trigger_error() 所在作用域内的所有变量、函数、类等数据 )
回调函数的返回值: 如果返回 false ,系统错误处理机制仍然继续抛出该错误,返回 true 或 无返回值 则消除错误。
你可以使用 set_error_handler() 来将 PHP 程序 抛出的错误代理给 ErrorException使错误可以类似异常那样显示:
<span>function</span> error_handler(<span>$errorType</span>, <span>$errorMsg</span>, <span>$errorFile</span>, <span>$errorLine</span><span> ) { </span><span>echo</span> '<div>; </span><span>throw</span> <span>new</span> ErrorException(<span>$errorMsg</span>, 0, <span>$errorType</span>, <span>$errorFile</span>, <span>$errorLine</span><span>); } </span><span>set_error_handler</span>('error_handler'<span>); </span><span>count</span>();
用户使用 trigger_error() 触发的错误不会被 try-catch 异常捕获语句捕获。