【问题标题】:error_get_last() returns null after set_error_handler(); php 7.0error_get_last() 在 set_error_handler() 之后返回 null; php 7.0
【发布时间】:2017-04-16 08:36:35
【问题描述】:

下一个代码:

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

完美运行并返回一个错误数组。 但是当我使用 set_error_handler 它返回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,并且不想破解他们的内部代码。

【问题讨论】:

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

标签: php codeigniter error-handling php-7


【解决方案1】:

这是正常行为,因为在您的示例中,错误已由 _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 中是一样的

【讨论】:

  • 但是,如果在错误处理程序中调用error_get_last(),则有很大的不同。如果您尝试使用自定义函数捕获错误(例如解析错误),例如_do_nothing() 并在该函数中调用 error_get_last() error_get_last() 将返回 PHP 5.* 中的错误。然而,在 PHP 7.* 中它会返回 NULL.
  • 好的,比较复杂。实际上 PHP 5 和 7 的不同行为需要注册一个自定义异常处理程序。我在这里记录了这一点:stackoverflow.com/questions/47728546/…
猜你喜欢
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2014-09-21
  • 2021-03-18
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多