php 如何解析和解释函数作用域


How php parse and interpret function scope

示例 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/>";
}