【问题标题】:PHP Namespaces global keyword in function函数中的 PHP 命名空间全局关键字
【发布时间】:2012-11-08 05:30:05
【问题描述】:
<?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;
    }
}

?>

因此,在上面的代码 sn-p 中,我尝试使用带有相应命名空间的 global 关键字的函数来显示正确的变量内容,但并没有发生预期的结果。返回的变量内容是使用 echo 语句的命名空间的内容,而不是来自指定的命名空间。输出为“RobertMauriceRichard”。有人可以解释一下吗?也许这是我对命名空间中函数内的“全局”关键字的误解?

【问题讨论】:

  • 您能否提供一个简短的 sn-p 代码,仅包含相关位?
  • 请格式化。每个缩进最好有 4 个空格。
  • @robertrocha It works for me.

标签: php function namespaces


【解决方案1】:

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

因此,您的 $a$b$cecho 语句在整个文件中都可用 - 实际上是相同的。

当您调用namespace\Middle\get_a(); 时,$a 仍然是“Robert”,因此返回了“Robert”。

尝试将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" */

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 2016-07-11
    • 1970-01-01
    • 2013-11-19
    • 2013-11-22
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多