示例1:这里我希望函数hello必须在全局范围内。 但是根据我的预期,它的行为并不相同。它没有将函数hello放入全局范围。在运行时php必须将函数hello放入全局范围。它表示未定义的函数hello()。
y
示例2:现在如示例1之后,我认为下面的脚本也必须作为示例1.我认为它也会给出错误未定义的函数bar()。但是现在它在行为方面有所不同并执行吧。
$fruit=true;
foo();
hello();
function foo()
{
echo "you are in the foo<br/>";
}
if($fruit)
{
function hello()
{
echo "you are in the hello<br/>";
}
}
所以我无法得到php解释器内部行为的概念。它如何解析程序,并一次执行步骤,还是一次执行整个程序?
答案 0 :(得分:2)
我为你引用manual:
当以条件方式定义函数时......必须在调用之前处理其定义。
还有更多:
PHP中的所有函数和类都具有全局范围 - 即使它们是在内部定义的,也可以在函数外部调用它们,反之亦然。
答案 1 :(得分:1)
示例一:
在脚本的一部分运行之前,您没有定义函数hello()
,它在IF中,因此在您尝试调用它之后才会定义
像这样,在调用现在定义的函数hello之前运行IF就没有错误。无论如何,它都是在GLOBAL范围内。但是你的方式直到你打电话之后都没有。
<?php
$fruit=true;
if($fruit)
{
function hello()
{
echo "you are in the hello<br/>";
}
}
foo();
hello();
function foo()
{
echo "you are in the foo<br/>";
}