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

取消引用未定义的对象会导致致命且无法捕获的错误。这就是发生这种情况时不调用您的异常处理程序和错误处理程序的原因。

虽然这种行为确实让我作为开发人员感到恼火,但我希望它会变成一个可捕获的异常。

更新

您可以做的一件事是在您的常规错误处理程序中抛出一个 ErrorException 来解决这个问题。这将防止在取消引用未定义符号时出现无法捕获的致命错误。

于 2012-11-16T12:37:50.797 回答