<?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
, $c
和 echo
语句在整个文件中都可用 - 实际上是相同的。
到时候你打电话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/