1

私はこれを使用しようとしています:

$error_handler = function($severity, $message, $filename, $lineno) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
};

$exception_handler = function($exception) {
    self::invokeHttpError(500);
};

set_error_handler($error_handler, E_ALL | E_STRICT);
set_exception_handler($exception_handler);

ただし、これを呼び出すと失敗します。

$fn = function() {
    $application->test(); // $application is undefined
};
$fn();

エラー ハンドラが呼び出されますが、例外ハンドラは呼び出されません。何が起こっている?

4

1 に答える 1

2

未定義のオブジェクトを逆参照すると、致命的でキャッチ不能なエラーが発生します。そのため、これが発生したときに例外ハンドラーとエラー ハンドラーが呼び出されません。

この振る舞いは開発者として私を本当にいらいらさせますが、代わりにキャッチ可能な例外に変わってほしいです.

アップデート

この問題を抑えるためにできることの 1 つは、通常のエラー ハンドラ内で ErrorException をスローすることです。これにより、未定義のシンボルを逆参照するときに、キャッチできない致命的なエラーが発生するのを防ぐことができます。

于 2012-11-16T12:37:50.797 に答える