0
function fatal_error_handler() {
    if ($error = error_get_last()) {

        switch ($error['type']) {
            case E_ERROR:
                $code = 'FATAL ERROR';
                break;
            case E_CORE_ERROR:
                $code = 'CORE ERROR';
                break;
            case E_CORE_WARNING:
                $code = 'CORE WARNING';
                break;
            default:
                $code = 'UNKNOWN FATAL ERROR';
        }

        echo 'An error occurred (Test 1): ' . $code . '<br />';
    }

    echo 'An error occurred (Test 2): ' . $code . '<br />';
}

register_shutdown_function('fatal_error_handler');

私は現在、register_shutdown_functionを使用して致命的なエラーハンドラーを作成しています。不思議に思うのですが、register_shutdown_functionは自動的に実行/実行されることになっていますか?私は上記のコードのこのブロックだけをテストしてきました。2番目のechoステートメントを意図的に挿入して、自動的に実行され、実際に2番目のechoステートメントが出力されるかどうかを確認しました(致命的なエラーが発生していないため、最初のechoステートメントは出力されません)。

4

2 に答える 2

2

他の人が述べているように、これはシャットダウン時に実行されます。スクリプトが正常に終了したか、エラーが原因で異常に終了したかは関係ありません。これは、エラー処理に使用しているため、ちょっと便利です。

静的クラスなど、以前に作成したすべてのオブジェクトもあり、前述のようにブラウザに出力できます。

于 2012-08-25T19:59:34.363 に答える
1

はい、これは意図的なものです:(私の強調)

スクリプトの実行が終了した後、またはexit()が呼び出された後に実行されるコールバックを登録します。

于 2012-08-25T19:55:40.387 に答える