gpt4 book ai didi

php - 调用未定义方法时不调用关闭回调

转载 作者:搜寻专家 更新时间:2023-10-31 21:40:43 25 4
gpt4 key购买 nike

考虑以下两个 PHP (5.4) 脚本。为什么传递给 register_shutdown_function 的回调只在脚本 A 执行时调用,而在脚本 B 执行时不调用?

脚本 A

set_error_handler(function() {
throw new Exception();
});
register_shutdown_function(function() {
echo "shutdown handler invoked\n";
});

undefined();
// "shutdown handler invoked" IS displayed

脚本 B

set_error_handler(function() {
throw new Exception();
});
register_shutdown_function(function() {
echo "shutdown handler invoked\n";
});

$undefined->undefined();
// "shutdown handler invoked" IS NOT displayed

最佳答案

这是一个错误——如果可调用对象注册了 set_error_handler抛出异常,关闭函数将不会被调用。

在这种特殊情况下,会发生以下事件链:

  1. 触发非 fatal error ( undefined variable :未定义)
  2. 调用用户错误处理程序
  3. 抛出异常
  4. 触发 fatal error (调用非对象的成员函数 undefined())
  5. 由于存在异常,未调用关闭函数

现有错误报告在 https://bugs.php.net/61767 (带补丁!)和 https://bugs.php.net/60909有更多详细信息。

关于php - 调用未定义方法时不调用关闭回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478249/

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