$GLOBALS
——引用全局作用域中可用的全部變量。
$GLOBALS
一個包含了全部變量的全局組合數組。變量的名字就是數組的鍵。(即所有出現過的全局變量,都可通過$GLOBALS獲取到)
注釋: “Superglobal”也稱為自動化的全局變量。這就表示其在腳本的所有作用域中都是可用的,不需要在函數或方法中用global $variable;來訪問它。
與所有其他超全局變量不同,$GLOBALS在PHP中總是可用的。
在PHP中,定義在函數體外的全局變量,函數內部是不能直接獲取的,所以需要global聲明或者$GLOBALS[]來獲取。
$GLOBALS
和 global
的區別:
- $GLOBALS['variable'] 是外部的全局變量$variable本身。
- global $variable 是外部$variable的同名引用或者指針。把 global $variable; 當成是 $variable = & $GLOBALS['variable']; 的簡寫。也就是在函數產生一個指向函數外部變量的別名變量,而不是真正的函數外部變量。【PHP變量函數里指出:在 Zend 引擎 1 代,它驅動了 PHP4,對於變量的 static 和 global 定義是以引用的方式實現的。例如,在一個函數域內部用 global 語句導入的一個真正的全局變量實際上是建立了一個到全局變量的引用。】
下面一個簡單的例子說明:
$a = 1; $b = 2; function Test1(){ echo $a; //輸出 :Notice: Undefined variable: a global $a; echo $a; //輸出: 1 unset($a); } Test1(); echo $a; // 輸出:1 function Test2(){ echo $GLOBALS['a']; //輸出: 1 unset($GLOBALS['a']); } Test2(); echo $a;//輸出:Notice: Undefined variable: a
$GLOBALS
和 global
的相同點:
- 可以在函數內部使用函數外聲明的變量;
- 在函數體外聲明全局變量沒有意義,在函數內部也無法使用。
例子:
global $a; $a = 1; function Test3(){ echo $a; //輸出:Notice: Undefined variable: a } Test3(); $GLOBALS['b'] = 2; function Test4(){ echo $b; //輸出:Notice: Undefined variable: b } Test4();