PHP 中global 和$GLOBALS[]的使用和區別
變數的範圍即它定義的上下文背景(也就是它的生效範圍)。大部分的 PHP 變數只有一個單獨的範圍。這個單獨的範圍跨度同樣包含了 include 和 require 引入的檔案。例如:
?
?
?
這裡變數 $a 將會在包含檔案 b.inc 中生效。但是,在使用者自訂函數中,一個局部函數範圍將被引入。任何用於函數內部的變數按預設情況將被限制在局部函數範圍內。例如:
?
?
?
這個指令碼不會有任何輸出,因為 echo 語句引用了一個局部版本的變數 $a,而且在這個範圍內,它並沒有被賦值。你可能注意到 PHP 的全域變數和 C 語言有一點點不同,在 C 語言中,全域變數在函數中自動生效,除非被局部變數覆蓋。這可能引起一些問題,有些人可能不小心就改變了一個全域變數。PHP 中全域變數在函數中使用時必須聲明為 global。
?
global 關鍵字
?
首先,一個使用 global 的例子:
Example #1 使用 global
?
?
?
以上指令碼的輸出將是“3”。在函數中聲明了全域變數 $a 和 $b 之後,對任一變數的所有引用都會指向其全域版本。對於一個函數能夠聲明的全域變數的最大個數,PHP 沒有限制。
在全域範圍內訪問變數的第二個辦法,是用特殊的 PHP 自訂 $GLOBALS 數組。前面的例子可以寫成:
Example #2 使用 $GLOBALS 替代 global
?
?
?
$GLOBALS 是一個關聯陣列,每一個變數為一個元素,鍵名對應變數名,值對應變數的內容。$GLOBALS 之所以在全域範圍記憶體在,是因為 $GLOBALS 是一個超全域變數。以下範例顯示了超全域變數的用處:
Example #3 示範超全域變數和範圍的例子
?
?
?
?global和$GLOBALS[]區別
?
$GLOBALS['var']是外部的全域變數本身,global $var是外部$var的同名引用或者指標
?
?結果:Notice: Undefined variable: var1 。因為變數var1被unset函數刪除了。
?
?結果:列印 1
刪除的只是別名引用,其本身的值沒有受到任何的改變。
global $var其實就是&$GLOBALS['var'],調用外部變數的一個別名而已。?
上面代碼中的$var1和$GLOBALS['var1']是指的同一變數的本身。
?
PHP的global變數的作用是定義全域變數,但是這個全域變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有檔案。?
?
結論:
1.$GLOBALS['var']是外部的全域變數本身?
2.global $var是外部$var的同名引用或者指標。
?
?