global $user
vs $user = $GLOBALS['user']
通过使用"全局$var"来获取全局变量,我们是获取全局变量的副本还是获取对该全局变量的引用?
global $user;
$user是全局对象的副本还是对实际全局变量的引用?
谢谢。
>通过将其与global $var;
一起使用,您始终有一个引用全局变量的局部变量。
以下代码:
$var = 1;
function test() {
global $var;
$var++;
}
test();
echo $var;
相当于:
$var = 1;
function test() {
$GLOBALS['var']++;
}
test();
echo $var;
通过使用global $var
名为"var"的全局变量将被导入到函数的局部范围内(即通过创建引用来完成)。
这与超全局变量$GLOBALS
不同。无论范围如何,这总是无处不在。
但是,这与引用不同。如果你真的想了解变量以及引用变量是如何做到的,我建议Derick Rethans的PDF:PHP中的参考:深入的观察(PDF)。
引用$GLOBALS的文档:
一个关联数组,其中包含对当前在脚本全局范围内定义的所有变量的引用。变量名称是数组的键。
一个简单的测试用例:
$foo = "foo";
echo $GLOBALS["foo"]; // foo
echo $GLOBALS["foo"] = "bar"; // bar
echo $foo; // bar
都不是。编译器将该变量名称的用法解析为全局范围内的相应变量。