php如何解析和解释函数范围

时间:2016-02-01 11:55:36

标签: php scope

示例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解释器内部行为的概念。它如何解析程序,并一次执行步骤,还是一次执行整个程序?

2 个答案:

答案 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/>";
}