2016-12-01 81 views
2

下一个代码:error_get_last()在set_error_handler()后返回null; PHP 7.0

$a["x"];//should trigger notice 
var_dump(error_get_last());//return the error array 

运行完美并返回一个错误的数组。 但是当我使用的set_error_han dler返回null

function _do_nothing(){} 
set_error_handler('_do_nothing'); 

$a["x"];//should trigger notice 
var_dump(error_get_last());//return null 

此代码工作完全在PHP5.4我已经更换3个月前到PHP7从那以后,我得到空在error_get_last() 我使用的是关机功能检查如果发生错误,并且如果发生错误,则将其发送给开发人员。

  1. 有没有办法让这段代码在PHP7中运行?并使error_get_last()与set_error_handler()一起工作?
  2. 解决方法的其他想法?并使关机功能得到最后一个错误?我使用CodeIgniter,并且不想破解他们的内部代码。
+0

+1提的PHP版本。这帮助我理解了为什么4年前我的代码突然停止工作。 – agoldev

回答

0

这是正常的现象,因为在你的榜样错误已经由_do_nothing()函数处理,所以error_get_last()回报null

如果删除set_error_handler('_do_nothing')错误将不再被处理,你会得到最后一个错误再次

function _do_nothing(){} 
//set_error_handler('_do_nothing'); 

$a["x"];//should trigger notice 
var_dump(error_get_last());//return array() "Undefined variable: a" 

此行为是在PHP5一样PHP7

+0

但是,如果在错误处理程序中调用error_get_last(),则会有很大差异。如果您尝试使用自定义函数捕获错误(例如解析erorrs),例如在函数error_get_last()中调用'_do_nothing()'并调用'error_get_last()'将返回PHP 5中的错误。但是,在PHP 7中*它会返回NULL。 – agoldev

+0

好吧,它更复杂。实际上,PHP 5和7的不同行为需要注册一个自定义异常处理程序。我记录在这里:https://stackoverflow.com/questions/47728546/error-get-last-returns-null-in-php-7-when-a-custom-exception-handler-is-set – agoldev