这是我正在测试处理错误的原始代码的片段。
第一种方法是调用item/getObjSize
,但第二种方法不是调用getObjSize
。可能是什么原因?
第一
fatalErrorHandler()
输出:
致命错误:在... test2.php中调用未定义的函数functiontest() 在12号线工作
SECOND
fatalErrorHandler()
输出:
致命错误:无法重新声明foo()(之前在声明中声明) ... test / test2.php:16)在第20行的../test2.php
在此方案中未调用fatalErrorHandler。为什么吗
答案 0 :(得分:4)
在PHP中,您可以在定义函数之前使用它。我认为这意味着解释器必须在开始执行之前解析所有函数。因此,当检测到此错误时,尚未调用register_shutdown_function
。
您可以通过将重复的函数定义移动到单独的文件中并将其包含在include
或require
中来测试。
答案 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(){}
}