PHP Namespaces函数中的全局关键字

时间:2012-11-20 07:17:29

标签: php function namespaces

<?php
namespace Top
{
    $a = "Robert";
    $b = "Richard";
    $c = "Maurice";
    function get_a()
    {
    global $a;
    return $a;
    }
    function get_b()
    {
    global $b;
    return $b;
    }
    function get_c()
    {
    global $c;
    return $c;
    }
    echo namespace\Middle\get_a();
    echo namespace\Middle\Bottom\get_c();
    echo namespace\get_b();
}

namespace Top\Middle
{
    $a = "Dauraun";
    $b = "Khalid ";
    $c = "Humberto";
    function get_a()
    {
        global $a;
        return $a;
    }
    function get_b()
    {
        global $b;
        return $b;
    }
    function get_c()
    {
        global $c;
        return $c;
    }
}

namespace Top\Middle\Bottom
{
    $a = "Terry";
    $b = "Jesse";
    $c = "Chris";
    function get_a()
    {
        global $a;
        return $a;
    }
    function get_b()
    {
        global $b;
        return $b;
    }
    function get_c()
    {
        global $c;
        return $c;
    }
}

&GT;

所以在上面的代码片段中,我试图使用带有相应命名空间的global关键字的函数显示正确的变量内容,但是没有发生所需的结果。返回的变量内容是使用echo语句的命名空间的内容,而不是指定的命名空间。输出是'RobertMauriceRichard'。有人可以解释一下吗?也许这是对我在命名空间中的函数中的'global'关键字的误解?

1 个答案:

答案 0 :(得分:1)

因为only 4 types of code are affected by namespace:类,接口,函数,常量。

因此,您的$a$b$cecho声明可用 - 并且实际上相同 - 贯穿整个文件。

当您致电namespace\Middle\get_a();时,$a仍然是“罗伯特”,因此返回“罗伯特”。

尝试将echo组放入不同的命名空间,您会看到不同的结果:

namespace Top\Middle
{
    /*...*/
    echo \Top\Middle\get_a();
    echo \Top\Middle\Bottom\get_c();
    echo \Top\get_b();
}
/* outputs "DauraunHumbertoKhalid" */

namespace Top\Middle\Bottom
{
    /*...*/
    echo \Top\Middle\get_a();
    echo \Top\Middle\Bottom\get_c();
    echo \Top\get_b();
}
/* outputs "TerryChrisJesse" */