在網(wǎng)上偶然看到一道題
<?php
$var1 = 1;
$var2 = 2;
function demo()
{
global $var1, $var2;
$var2 = &$var1;
}
demo();
echo $var2;
在我的猜想之中輸出應(yīng)該是1,而不是2。官方給出的說法是:
$GLOBALS['var']是外部的全局變量$var本身。
global $var 是外部$var的同名引用或者指針。
說實話,沒看懂。
正解來了php中g(shù)lobal與$GLOBAL的區(qū)別分析
函數(shù)中的$var1,$va2都是局部變量,只不過是加了global關(guān)鍵字后,分別引用指向全局變量$var1,$va2了,當(dāng) $var2 = &$var1; 時,局部變量$var2不再指向全局變量$val2,而重新指向全局變量$var1,換句話來說,局部變量$var2的改變,不會再影響到全局變量$val2,而會影響到重新指向的全局變量$val1。
不過仍然有點似懂非懂;再來兩個例子加深印象
<?php
$var1 = 1;
$var2 = 2;
function demo()
{
global $var1, $var2;
$var2 = &$var1;
//在函數(shù)內(nèi)部輸出var2變量
echo $var2;
}
demo();
echo $var2;
輸出結(jié)果是12
當(dāng) $var2 = &$var1; 時,局部變量$var2不再指向全局變量$val2,而重新指向全局變量$var1。
<?php
$var1 = 1;
$var2 = 2;
function demo()
{
global $var1, $var2;
$var2 = &$var1;
//此時這里應(yīng)該是var1加1了
$var2++;
}
demo();
//多輸出一個var1
echo $var1;
echo $var2;
輸出結(jié)果是22
局部變量$var2的改變,不會再影響到全局變量$val2,而會影響到重新指向的全局變量$val1。