<?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'关键字的误解?
答案 0 :(得分:1)
因为only 4 types of code are affected by namespace:类,接口,函数,常量。
因此,您的$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" */