Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
如何捕获PHP7+;中的可恢复错误;?_Php_Exception_Error Handling - Fatal编程技术网

如何捕获PHP7+;中的可恢复错误;?

如何捕获PHP7+;中的可恢复错误;?,php,exception,error-handling,Php,Exception,Error Handling,使我认为可以捕获可恢复的错误,但事实并非如此,如下所示: 在PHP7中,并非所有错误都转换为可丢弃的错误 事实上,政府: 大多数错误现在通过抛出错误异常来报告 (我的重点)。大多数!==全部 有些错误仍然无法捕获 有趣的是,在PHP7.1发布之前,您使用的错误消息是“可捕获的致命错误”,而不是“可恢复的致命错误” 这是,但devs实现的解决方案是将错误字符串从可捕获更改为可恢复,以消除误解 在您正在测试的特定情况下,phpinfo()似乎会引发一个可恢复的错误,而不是抛出一个错误,因此您不能以这

使我认为可以捕获可恢复的错误,但事实并非如此,如下所示:


在PHP7中,并非所有错误都转换为可丢弃的
错误

事实上,政府:

大多数错误现在通过抛出错误异常来报告

(我的重点)。大多数!==全部

有些错误仍然无法捕获

有趣的是,在PHP7.1发布之前,您使用的错误消息是“可捕获的致命错误”,而不是“可恢复的致命错误”

这是,但devs实现的解决方案是将错误字符串从可捕获更改为可恢复,以消除误解

在您正在测试的特定情况下,
phpinfo()
似乎会引发一个
可恢复的错误
,而不是抛出一个
错误
,因此您不能以这种方式捕获它是有道理的

然而,并不是所有的希望都破灭了

您可以通过实现自己的错误处理程序将所有错误转换为异常。
ErrorException
中描述了一个示例:

这个例子的好处是它考虑了您的错误报告设置,所以只有在您的设置下会报告的错误才会作为异常抛出。否则,什么也不会发生

测试您的代码:

<?php
function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // This error code is not included in error_reporting
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");

$_SERVER['TEST'] = new stdClass;

try {
    phpinfo(INFO_VARIABLES);
} catch (\Throwable $e) {echo 'CAUGHT!!!!!!';}

在PHP7中,并非所有错误都转换为可丢弃的
errors

事实上,政府:

大多数错误现在通过抛出错误异常来报告

(我的重点)。大多数!==全部

有些错误仍然无法捕获

有趣的是,在PHP7.1发布之前,您使用的错误消息是“可捕获的致命错误”,而不是“可恢复的致命错误”

这是,但devs实现的解决方案是将错误字符串从可捕获更改为可恢复,以消除误解

在您正在测试的特定情况下,
phpinfo()
似乎会引发一个
可恢复的错误
,而不是抛出一个
错误
,因此您不能以这种方式捕获它是有道理的

然而,并不是所有的希望都破灭了

您可以通过实现自己的错误处理程序将所有错误转换为异常。
ErrorException
中描述了一个示例:

这个例子的好处是它考虑了您的错误报告设置,所以只有在您的设置下会报告的错误才会作为异常抛出。否则,什么也不会发生

测试您的代码:

<?php
function exception_error_handler($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        // This error code is not included in error_reporting
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");

$_SERVER['TEST'] = new stdClass;

try {
    phpinfo(INFO_VARIABLES);
} catch (\Throwable $e) {echo 'CAUGHT!!!!!!';}

这可以帮助您解决或理解PHP7+中新的异常处理程序。从
fatal
recoverable errors
引发的异常在PHP7中不扩展
exception
也请参考此。您是否希望发布的代码引发错误?为什么?@DhavalPurohit-我没有捕获
异常
-我正在捕获
可丢弃的
。这可以帮助您解决或理解PHP7+中新的异常处理程序,以及从
致命
可恢复错误
引发的异常不在PHP7中扩展
异常
。也请参考此。您是否期待发布代码以引发错误?为什么?@DhavalPurohit-我没有捕获
异常
-我捕获的是
可丢弃的