异常处理程序在闭包中不起作用?

时间:2012-11-16 12:14:56

标签: php exception

我试图用这个:

$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();

调用错误处理程序,但不调用异常处理程序。发生了什么事?

1 个答案:

答案 0 :(得分:2)

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

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

<强>更新

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