ホームページ  >  記事  >  php教程  >  PHP 例外処理、エラースロー、エラーコールバック関数

PHP 例外処理、エラースロー、エラーコールバック関数

WBOY
WBOYオリジナル
2016-07-09 09:08:04961ブラウズ

1. エラーおよび例外レベル定数テーブル

エラー: コンパイル中に見つからない実行時エラー。割り当てられていない変数を出力するには、エコーを使用することをお勧めします。この種の問題により、プログラムまたはロジックが続行できなくなり、中断する必要が生じます。

例外: ロジックは実行可能ですが、アプリケーションのシナリオを満たさないことがよくあります。そのため、例外は主に次のようなものに依存します。コード作成者は、判断後にスローし、例外をキャッチして、プログラムを中断せずにこれらの状況に対処できるようにプログラム フローを変更する必要があります。

PHP の例外とエラーの定義は、特に古いバージョンの PHP ではあまり明確ではないようです。

录 エラーとログレコードの値

1 E_ERROR (整数) 致命的な実行時エラー。 |このタイプのエラーは、メモリ割り当てによって引き起こされる問題など、通常は回復不可能な状況です。その結果、スクリプトが終了し、実行が続行されなくなります。

2 E_WARNING (整数) 実行時警告 (致命的ではないエラー)。 |プロンプト・メッセージのみが表示されますが、スクリプトは終了しません。

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() によって引き起こされるエラーなど、例外をキャッチするために使用されます。

PHP 例外処理、エラースロー、エラーコールバック関数
リーリー
PHP 例外処理、エラースロー、エラーコールバック関数

例:

PHP 例外処理、エラースロー、エラーコールバック関数
リーリー
PHP 例外処理、エラースロー、エラーコールバック関数

例外クラス構造: ほとんどのメソッドは書き換えが禁止されています(最終)

PHP 例外処理、エラースロー、エラーコールバック関数
リーリー
PHP 例外処理、エラースロー、エラーコールバック関数

拡張例外クラス

try-catch には複数の catch 句を含めることができます。最初の catch 句から始めて、句内の例外変数の型が throw ステートメントによってスローされた例外の型と一致する場合、その句が実行され、他の catch は実行されません。例外はすべての例外クラスの基本クラスであるため、異なる例外の種類に応じて異なる処理メソッドを使用する必要がある場合は、Exception タイプの catch を使用する必要があります。句は最後に置かれます。

Exception はすべての例外の基本クラスであり、実際のニーズに応じて例外クラスを拡張できます

PHP 例外処理、エラースロー、エラーコールバック関数
リーリー
PHP 例外処理、エラースロー、エラーコールバック関数

catch 句で例外の種類を決定したり、コードなどの情報に基づいて例外を処理するかどうかを決定したりできます。catch 句で記述したコードがキャッチした例外を適切に処理できない場合は、catch 句内で続行できます。 .例外をスローします。

3. 例外コールバック関数

PHP 例外処理、エラースロー、エラーコールバック関数
リーリー
PHP 例外処理、エラースロー、エラーコールバック関数

 

 Exception 异常的回调函数并不能像  set_error_handler 的回调函数那样通过返回 true 来使异常被消除,即使回调函数处理了异常,后继代码也不会被继续执行,因此想继续执行后续代码必须使用 try-catch,在 try-catch 内被捕获的异常不会触发 exception_handler

 

但是有一个例外:抛出的异常即使没有被处理,脚本结束回调函数可以被执行。

 

register_shutdown_function(callback functionName[,argument1,argument2,...]);

例如:

PHP 例外処理、エラースロー、エラーコールバック関数
<span style="color: #0000ff;">function</span><span style="color: #000000;"> shutdownfunction(){

    </span><span style="color: #0000ff;">echo</span> 'script is end'<span style="color: #000000;">;

}

</span><span style="color: #008080;">register_shutdown_function</span>("shutdownfunction"); 
PHP 例外処理、エラースロー、エラーコールバック関数

 

因为 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 style="color: #008080;" data-mce-mark="1">set_error_handler</span>(<span style="color: #0000ff;" data-mce-mark="1">callback</span> functionName[,user_error_type]); <span style="color: #008000;" data-mce-mark="1">//</span><span style="color: #008000;" data-mce-mark="1"> 为 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使错误可以类似异常那样显示:

PHP 例外処理、エラースロー、エラーコールバック関数
<span style="color: #0000ff;">function</span> error_handler(<span style="color: #800080;">$errorType</span>, <span style="color: #800080;">$errorMsg</span>, <span style="color: #800080;">$errorFile</span>, <span style="color: #800080;">$errorLine</span><span style="color: #000000;"> ) {
    </span><span style="color: #0000ff;">echo</span> '<div style="color:red;">error_handler is called!</div>'<span style="color: #000000;">;
    </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> ErrorException(<span style="color: #800080;">$errorMsg</span>, 0, <span style="color: #800080;">$errorType</span>, <span style="color: #800080;">$errorFile</span>, <span style="color: #800080;">$errorLine</span><span style="color: #000000;">);
}
</span><span style="color: #008080;">set_error_handler</span>('error_handler'<span style="color: #000000;">);
</span><span style="color: #008080;">count</span>();
PHP 例外処理、エラースロー、エラーコールバック関数

 

 用户使用 trigger_error()  触发的错误不会被 try-catch 异常捕获语句捕获。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。