在网上偶然看到一道题
<?php
$var1 = 1;
$var2 = 2;
function demo()
{
global $var1, $var2;
$var2 = &$var1;
}
demo();
echo $var2;
在我的猜想之中输出应该是1,而不是2。官方给出的说法是:
$GLOBALS['var']
是外部的全局变量$var
本身。
global $var
是外部$var
的同名引用或者指针。
说实话,没看懂。
正解来了php中global与$GLOBAL的区别分析
函数中的$var1,$va2
都是局部变量,只不过是加了global关键字后,分别引用指向全局变量$var1,$va2
了,当 $var2 = &$var1;
时,局部变量$var2
不再指向全局变量$val2
,而重新指向全局变量$var1
,换句话来说,局部变量$var2
的改变,不会再影响到全局变量$val2
,而会影响到重新指向的全局变量$val1
。
不过仍然有点似懂非懂;再来两个例子加深印象
<?php
$var1 = 1;
$var2 = 2;
function demo()
{
global $var1, $var2;
$var2 = &$var1;
//在函数内部输出var2变量
echo $var2;
}
demo();
echo $var2;
输出结果是12
当 $var2 = &$var1;
时,局部变量$var2
不再指向全局变量$val2
,而重新指向全局变量$var1
。
<?php
$var1 = 1;
$var2 = 2;
function demo()
{
global $var1, $var2;
$var2 = &$var1;
//此时这里应该是var1加1了
$var2++;
}
demo();
//多输出一个var1
echo $var1;
echo $var2;
输出结果是22
局部变量$var2
的改变,不会再影响到全局变量$val2
,而会影响到重新指向的全局变量$val1
。