函数中的 PHP 命名空间全局关键字

标签 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;
    }
}

?>

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

最佳答案

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

所以你的 $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" */

关于函数中的 PHP 命名空间全局关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13468274/

相关文章:

c# - 您如何确保 .Net 始终从 namespace 树的根部搜索 namespace ?

python - 安装 Python 库后自动创建奇怪的文件

php - 如何计算foreach循环递归中的行?

javascript - 如何在每个 Accordion 上插入打印按钮?

php - ZendFramework - 如何使用带 bin2hex 和 hex2bin 的 Zend_Filter 进行加密和解密?

php - 如何使用 phpunit 在 Laravel 4 中测试命名空间对象

php - 使用 PHP 获取我必须登录才能到达的 URL 的源代码

actionscript-3 - AS3 ...(其余)参数

c - 如何在C++标准库中添加我们自己的函数

c - 在 C 中使用指向函数的指针调用函数