包含所有全域變數的關聯陣列,鍵名即變數名。函數內部可直接存取 $GLOBALS['var'] 讀寫真正的全域變數。
在函數內建立指向全域變數的別名,非真正的全域變數本體。別名僅存在於函數作用域,unset() 僅銷毀別名,不影響外部原變數。
$var1 = 5; $var2 = $var3 = 0;
function t1() { global $var1, $var2; $var2 =& $var1; }
function t2() { $GLOBALS['var3'] =& $GLOBALS['var1']; }
t1(); echo $var2 . "\n"; // 0 (別名綁定時 $var1 尚未修改?實測為 0)
t2(); echo $var3 . "\n"; // 5 (直接參考 $GLOBALS['var1'])
// 另一測試
$var1 = 1;
function t1() { global $var1; $var1 = 2; unset($var1); }
function t2() { $GLOBALS['var1'] = 3; unset($GLOBALS['var1']); }
t1(); echo $var1 . "\n"; // 2 (外部變數被修改,unset 僅移除別名)
t2(); echo $var1 . "\n"; // 無輸出 (全域變數本體已銷毀)
| 特性 | $GLOBALS['var'] | global $var |
|---|---|---|
| 本質 | 真正的全域變數 | 指向全域變數的別名 (引用) |
| unset 影響 | 銷毀全域變數本體 | 僅銷毀函數內別名 |
| 跨檔案 include | 適用 | 適用 |
| 類別成員存取 | 不可用 (需用 $this->) | 不可用 |
$GLOBALS 為超全域變數,無需 global $GLOBALS 即可在函數內直接使用。