我试图使用这个:
$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。这将防止在取消引用未定义的符号时出现无法捕获的致命错误。