示例 1:在这里,我希望函数 hello 必须在全局范围内。但正如我的期望,它的行为并不相同。它不会将函数 hello 放入全局范围。在运行时,PHP 必须将函数 hello 放入全局范围。它说未定义的函数hello()。
$fruit=true;
foo();
hello();
function foo()
{
echo "you are in the foo<br/>";
}
if($fruit)
{
function hello()
{
echo "you are in the hello<br/>";
}
}
示例 2:现在与示例 1 一样,我认为下面的脚本也必须作为示例 1 工作。但是现在它的行为有所不同并执行酒吧。
foo();
bar();
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.'n";
}
}
所以我无法理解 php 解释器在内部的行为方式的概念。它如何解析程序,是逐个执行步骤,还是一次执行整个程序?
我为你引用一本手册:
当函数以条件方式定义时....在调用之前必须处理其定义。
以及更多:
PHP 中的所有函数和类都具有全局作用域 - 即使在函数内部定义,也可以在函数外部调用它们,反之亦然。
示例一:
在脚本的一部分运行之前,不要定义函数hello()
,它在 IF 中,因此直到您尝试调用它之后才会定义
像这样,您不会收到任何错误,因为 IF 是在调用现在定义的函数 hello 之前运行的。无论哪种方式,它都在全球范围内。但是你的方式,直到你打电话之后,它才在任何地方存在。
<?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/>";
}