ago*_*dev 3 php exception fatal-error
好的,这需要一些时间来分解它。这里是:
有一个包含的错误脚本,它是本文其余部分的以下内容:
<?php
$a = 4 // missing semicolon
$b = 2;
Run Code Online (Sandbox Code Playgroud)
然后考虑以下脚本来处理错误。请注意,最初未注册自定义异常处理程序。
<?php
// disable default display of errors
ini_set('display_errors', 0);
// register functions
#set_exception_handler('catchException'); // initially not set
register_shutdown_function('catchError');
// define error function
function catchError(){
echo "PHP version: ".phpversion();
if(is_null(error_get_last())) echo "<h1>No errors fetched!</h1>";
else echo "<h1>Error fetched:</h1>";
var_dump(error_get_last());
}
// define exception function (not used in all examples)
function catchException(){}
// include faulty script
include("D:/temp/faulty.php");
Run Code Online (Sandbox Code Playgroud)
PHP 5 和 7 的结果是相同的。error_get_last() 函数返回最后发生的错误 ( Screenshot )。
现在我们设置一个自定义函数取消注释该行
set_exception_handler('catchException');
Run Code Online (Sandbox Code Playgroud)
这在 PHP 5 中可以正常工作,但是在 PHP 7 中该error_get_last()函数返回NULL(Screenshot)。
为什么是这样?特别令人困惑的是自定义异常处理程序是空的,例如没有“成功处理”错误。
如何防止这种情况?
祝一切顺利,感谢您的提示!
事情(不是真正的问题)是 PHP 7 抛出 ParseError 类型的异常而不是产生错误。因此,最好使用异常处理程序进行处理。制作一个很好的异常处理程序来很好地处理异常:
function catchException($e){
echo "<h1>".get_class($e)."</h1>";
echo $e->getMessage()."<br>";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |