gpt4 book ai didi

php - 当设置自定义异常处理程序时,error_get_last() 在 PHP 7 中返回 NULL

转载 作者:行者123 更新时间:2023-12-04 15:52:53 25 4
gpt4 key购买 nike

好的,这需要一些时间来分解它。在这里:

本文的其余部分包含一个错误的脚本,如下所示:

故障.php

<?php
$a = 4 // missing semicolon
$b = 2;

然后考虑以下用于处理错误的脚本。请注意,自定义异常处理程序最初未注册。

脚本.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 7 抛出 ParseError 异常,而不是触发 E_PARSE 类型的错误。如果遇到未捕获的异常,默认异常处理程序似乎会触发错误。但是,如果您将其替换为 set_exception_handler(),除非您自己动手,否则它不会再发生。

参见 PHP docs :

PHP 7 changes how most errors are reported by PHP. Instead of reporting errors through the traditional error reporting mechanism used by PHP 5, most errors are now reported by throwing Error exceptions.

关于php - 当设置自定义异常处理程序时,error_get_last() 在 PHP 7 中返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com