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

时间:2012-06-09 18:03:48

标签: php scope global-variables

global $user vs $user = $GLOBALS['user']

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

global $user;

$ user是全局对象的副本还是对实际全局变量的引用?

感谢。

4 个答案:

答案 0 :(得分:2)

通过使用global $var,名为“var”的全局变量将被导入到函数的本地范围内(通过创建引用来完成)。

这与超级全局变量$GLOBALS不同。无论范围如何,这总是无处不在。

然而,这与参考文献不同。如果您真的想了解变量以及变量的引用方式,我建议使用Derick Rethans的PDF:References in PHP: An In-Depth Look(PDF)。

答案 1 :(得分:1)

通过将其与global $var;一起使用,您总是有一个引用全局变量的局部变量。

以下代码:

$var = 1;

function test() {
  global $var;

  $var++;
}

test();
echo $var;

相当于:

$var = 1;

function test() {
  $GLOBALS['var']++;
}

test();
echo $var;

答案 2 :(得分:0)

引用$GLOBALS' documentation

  

包含引用的关联数组,用于当前在脚本全局范围内定义的所有变量。变量名是数组的键。

一个简单的测试用例:

$foo = "foo";
echo $GLOBALS["foo"];         // foo
echo $GLOBALS["foo"] = "bar"; // bar
echo $foo;                    // bar

答案 3 :(得分:0)

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