.PHP.通过使用“全局$var”来获取全局变量,我们是获取全局变量的副本还是获取对该全局变量的引用


PHP. by using "global $var" to get a global variable, do we get a copy of the global var or get a reference to that global variable?

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

都不是。编译器将该变量名称的用法解析为全局范围内的相应变量。