如何捕获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-我没有捕获异常
-我捕获的是可丢弃的
。