在php程序開發中,很多開發者沒有注意到$GLOBALS[]和global存在的差別,這兩種寫法其實差別挺大的、並非只是字面上面的差別,下面我來了解一下他們的具體差別吧。
具體差別
1.$GLOBALS['var']是外部的全局變量本身(實實在在的外部$var本身)。
2.global $var是外部$var的同名引用或者指針(可以理解為是一個外部$var的替身)。
舉例說明一下:
Copy to Clipboard
引用的內容:[www.bkjia.com]
<?php
$var1 = "test1";
$var2 = "test2";
function test(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
}
test();
echo $var2; // 將輸出 test1
?>
上面代碼的輸出結果為 test1
Copy to Clipboard
引用的內容:[www.bkjia.com]
<?php
$var1 = "test1";
$var2 = "test2";
function test(){
global $var1,$var2;
$var2 = &$var1;
}
test();
echo $var2; // 將輸出test2
?>
上面代碼的輸出有點意外,結果為test2
為什麼會輸出test2呢?其實就是因為$var1的引用指向了$var2的引用地址(通俗的講test函數中的$var1是一個替身)。導致實質的值沒有改變。
我們再來看一個例子。
Copy to Clipboard
引用的內容:[www.bkjia.com]
<?php
$var1 = "test1";
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1; // 什麼也輸出不了
?>
因為$var1已經被真實的刪除了,所以什麼東西輸出不了。
Copy to Clipboard
引用的內容:[www.bkjia.com]
<?php
$var1 = "test1";
function test(){
global $var1;
unset($var1);
}
test();
echo $var1; // 輸出 test1
?>
這次又意外的輸出了test1。證明刪除的只是別名或引用(替身),變量本身的值沒有受到任何的改變。
明白了吧?
也就是說global $var其實就是$var = &$GLOBALS['var']調用外部變量的一個別名而已。