日々のプロジェクト開発プロセスでは、予期しない異常なエラーが常に発生します。これを比較的適切に処理しないと、プログラムは非常に見栄えの悪いものになります。専門的でない場合は、他の人がシステムを攻撃するための有効な情報になる可能性があります。現時点でエラー メッセージがない場合は、コードを確認するだけです。プロジェクトに何百行ものエラーがあることは、私たちにとって非常に恐ろしいことであることを最初から認識しておく必要があります。プロジェクト開発プロセス中に例外やエラーを迅速かつ正確に特定するにはどうすればよいでしょうか。この記事はエラーや例外を自分で処理していますので、皆さんと共有してお互いの学びを兼ねてメモとして残しておきたいと思います。
システムエラーハンドラー:
PHP の通常の状況では、エラーは正常に出力されますが、一部のフレームワークでは、フレームワーク自体が独自の処理メカニズムを持っているか、コード内 (通常はこれらの関数) で処理される可能性があります。設定:
1.error_reporting(); PHP のエラー報告レベルを設定し、現在のレベルを返します
エラーレポート(レポートレベル)
パラメータレベルが指定されていない場合は、現在のエラーレベルが返されます。レベルに使用できる値は次のとおりです:
価値 |
定数 |
説明 |
|
1 |
E_エラー |
致命的なランタイムエラー。このエラーは再利用できません。スクリプトの実行が中断されました。 |
|
2 |
E_警告 |
致命的ではない実行時警告。スクリプトの実行は中断されません。 |
|
4 |
E_PARSE |
コンパイル時間分析エラー。解析エラーはアナライザーによってのみ生成されるべきです |
|
8 |
E_NOTICE |
実行時通知。見つかったスクリプトはバグである可能性がありますが、スクリプトの実行時に通常どおりに発生する可能性もあります |
|
16 |
E_CORE_ERROR |
PHP起動時の致命的なエラー。これは PHP のコアの E_ERROR のようなものです |
|
32
|
E_CORE_WARNING
|
PHP 起動時の警告。これは、PHPのコアのE_WARNINGのようなものです |
|
E_COMPILE_ERROR |
致命的なコンパイル時エラー。これは、Zend スクリプト エンジンを渡して E_ERROR を生成するのと同じです |
||
128 |
E_COMPILE_WARNING |
致命的ではないコンパイル時の警告。 Zendスクリプトエンジン経由でE_WARNING を生成するようなものです |
|
256 |
E_USER_エラー |
ユーザーが生成した致命的なエラー。PHP 関数 trigger_error() を使用してプログラマが設定したエラーに類似しています。 512 |
|
| 致命的ではないユーザー生成の警告。プログラマーが PHP の 関数を使用して設定するものに似ています。
|
1024 E_USER_NOTICE |
ユーザー生成の通知。PHP 関数を使用してプログラマが設定した通知に似ています。 2048 | E_STRICT
実行時通知。 PHP |
コードの相互運用性と互換性を高めるためのコードへの変更案 |
4096 | E_RECOVERABLE_ERROR|
キャッチ可能な致命的なエラー。 E_ERROR |
に似ていますが、ユーザー定義のハンドラーによってキャッチできます(set_error_handler() | を参照)
|
|
8191 |
E_ALL |
レベル E_STRICT を除くすべてのエラーと警告 (PHP6.0 では、E_STRICT は E_ALL の一部になります) |
ここで、$level が 0 の場合、エラー出力がオフになる、つまりエラーが出力されないことに注意してください。
2.set_error_handler()
定義と使用法
set_error_handler() 関数は、ユーザー定義のエラー処理関数を設定します。
この関数は、実行時にユーザー独自のエラー処理メソッドを作成するために使用されます。
この関数は古いエラー ハンドラーを返すか、失敗した場合は null を返します。
文法
set_error_handler(error_function,error_types)
パラメータ |
説明 |
エラー関数 |
必須。エラーが発生したときに実行する関数を指定します。 |
エラーの種類 |
オプション。ユーザー定義エラーをどのエラー報告レベルで表示するかを指定します。デフォルトは「E_ALL」です。 |
ヒント: この関数を使用すると、標準の PHP エラー処理関数は完全にバイパスされ、ユーザー定義のエラー ハンドラーは必要に応じてスクリプトを終了 (die()) する必要があります。
注: スクリプトの実行前にエラーが発生した場合、その時点ではカスタム プログラムが登録されていないため、カスタム エラー ハンドラーは使用されません。テストコードは次のとおりです:
リーリー
//上記のケースから、my_error メソッドを登録すると、システムは元のエラー処理 error_fuction() メソッドを自動的に上書きすることがわかります
上記のプログラムを実行した結果:
カスタムエラートリガー
定義と使用法trigger_error() 関数はユーザー定義のエラー メッセージを作成します。
trigger_error() は、ユーザーが指定した条件下でエラー メッセージをトリガーするために使用されます。これは、組み込みエラー ハンドラー、または set_error_handler() 関数で作成されたユーザー定義関数とともに使用されます。
不正なエラータイプが指定された場合、この関数は false を返し、それ以外の場合は true を返します。
文法
trigger_error(error_message,error_types)
パラメータ
|
説明
|
エラーメッセージ
|
必須。エラーメッセージを指定します。長さ制限は 1024 文字です。 |
エラーの種類
|
可选。规定错误消息的错误类型。 可能的值:
|
/** * * @param type $level * @param type $msg */ function my_error($level, $msg) { switch ($level) { case E_USER_ERROR: echo "ERROR:<br/>"; break; case E_USER_WARNING: echo "WARNING:<br/>"; break; case E_USER_NOTICE: echo "NOTICE:<br/>"; break; default: break; } echo "错误编号:" . $level . " <br/>"; echo "错误信息:" . $msg; } //注册错误处理器 set_error_handler('my_error'); if (89 > 8) { //调用错误触发器 trigger_error('这是错误啊', E_USER_WARNING); }
运行结果如下:
WARNING:
错误编号:512
错误信息:这是错误啊
以上所述就是本文的全部内容了,希望大家能够喜欢。