【发布时间】:2018-05-23 12:53:12
【问题描述】:
好的,这需要一些时间来分解它。这里是:
本文的其余部分包含一个包含错误的脚本:
faulty.php
<?php
$a = 4 // missing semicolon
$b = 2;
然后考虑以下脚本来处理错误。请注意,自定义异常处理程序最初未注册。
script.php
<?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");
没有自定义异常处理程序的结果
PHP 5 和 7 的结果是相同的。 error_get_last() 函数返回最后出现的错误 (Screenshot)。
自定义错误处理程序的结果
现在我们设置一个自定义函数取消注释行
set_exception_handler('catchException');
这在 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>";
}
【问题讨论】:
标签: php exception fatal-error