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



我试图使用这个:

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

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

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

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

更新

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

最新更新