Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 异常处理程序在闭包中不工作?_Php_Exception - Fatal编程技术网

Php 异常处理程序在闭包中不工作?

Php 异常处理程序在闭包中不工作?,php,exception,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_h

我一直在尝试使用这个:

$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。这将防止在取消引用未定义的符号时出现不可跟踪的致命错误

你怎么知道没有调用任何东西?默认的异常处理程序被调用。你是对的,即使在闭包之外也会发生问题。这太糟糕了。我听说ya:)这总是迫使我阅读服务器日志和应用程序日志,以了解实时系统是否遇到任何问题。这也被称为白色屏幕的死亡顺便说一句。真烦人。