不少人都認爲$GLOBALS['var']和global $var只是寫法上不一樣,其實並非這樣php
根據官方的解釋是 $GLOBALS['var']是外部全局變量$var的自己, 而global $var 是外部$var的同名引用函數
下面咱們來舉個例子:code
<?phpio
$var1 = 1;function
$var2 = 2;test
function test()
{
$GLOBALS['var1'] = &$GLOBALS['var2'];
}變量
test();file
echo $var1;引用
正常輸出2co
<?php
$var1 = 1;
$var2 = 2;
function test()
{
global $var1, $var2;
$var2 = &$var1;
echo $var2;
$var2 = '3';
}
test(); // 輸出1
echo $var1; // 輸出3
echo $var2; // 輸出2
test() 函數中的$var1和$var2都是局部變量,只不過加了global後。分別引用指向了全局變量$var1和$var2,當執行了$var2 = &$var1;
局部變量$var2不在引用指向全局變量$var2,而是指向全局變量$var1,換句話來講,局部變量$var2改變不會影響到全局變量$var2,
而會影響到全局變量$var1.
下面再舉個例子來講明官方解釋:
<?php
$var1 = 1;
function test()
{
unset($GLOBALS['var1']);
}
test();
echo $var1;
會報出一個 PHP Notice: Undefined variable: var1 in /usercode/file.php 的錯誤,說明全局變量已經被刪除了
$var1 = 1;
function test()
{
global $var1;
unset($var1);
}
test();
echo $var1;
輸出結果爲 1 ,證實刪除的只是別名,對全局變量$var1的引用,對全局變量$var1並無影響
也就是說 global $var1 就是 $var1 = &$GLOBALS['var1'],調用外部變量的別名而已