register_shutdown_function没有被调用

时间:2015-06-08 12:16:51

标签: php

这是我正在测试处理错误的原始代码的片段。

第一种方法是调用item/getObjSize,但第二种方法不是调用getObjSize。可能是什么原因?

第一

fatalErrorHandler()
  

输出:

     

致命错误:在... test2.php中调用未定义的函数functiontest()   在12号线工作

SECOND

fatalErrorHandler()

输出:

  

致命错误:无法重新声明foo()(之前在声明中声明)   ... test / test2.php:16)在第20行的../test2.php

在此方案中未调用fatalErrorHandler。为什么吗

2 个答案:

答案 0 :(得分:4)

在PHP中,您可以在定义函数之前使用它。我认为这意味着解释器必须在开始执行之前解析所有函数。因此,当检测到此错误时,尚未调用register_shutdown_function

您可以通过将重复的函数定义移动到单独的文件中并将其包含在includerequire中来测试。

答案 1 :(得分:0)

我认为这与编译顺序有关。查看条件。

看看这个例子:

// The shutdown function won't be called
register_shutdown_function(function(){
    echo "I'm in!";
});
function test(){}
function test(){}

现在在此示例中:

// The shutdown function will be called
register_shutdown_function(function(){
    echo "I'm in!";
});
function test(){}
if(1 === 1)
{
    function test(){}
}