| 特性 | global $var | $GLOBALS['var'] |
|---|---|---|
| 本質 | 創建指向全局變量的**別名/引用** | 直接訪問全局符號表中的**原始變量** |
| 賦值行為 | $a = &$GLOBALS['var'] 相當 | 直接操作原變量 |
| unset 影響 | 僅銷毀局部別名,全局原變量**保留** | 銷毀全局原變量,**真正刪除** |
| 引用重綁 | global $a; $a = &$b; 改變別名指向,全局 $var 不變 | $GLOBALS['var'] = &$b; 修改全局綁定 |
$var = 1;
function test_global() {
global $var;
unset($var); // 僅銷毀局部別名
}
test_global();
echo $var; // 輸出 1,全局變量未受影響
function test_globals() {
unset($GLOBALS['var']); // 銷毀全局變量
}
test_globals();
echo $var; // 輸出空/Notice,全局變量已刪除
$var1 = 1; $var2 = 2;
function test_global_ref() {
global $var1, $var2;
$var2 = &$var1; // $var2 成為 $var1 的別名,指向同一內存
}
test_global_ref();
echo $var2; // 輸出 1(預期 2?實際 1,因 $var2 重綁導致邏輯混亂)
$var1 = 1; $var2 = 2;
function test_globals_ref() {
$GLOBALS['var2'] = &$GLOBALS['var1']; // 直接修改全局綁定
}
test_globals_ref();
echo $var2; // 輸出 1,全局 $var2 真正指向 $var1
function foo() {
global $bar;
$bar = 'changed'; // 修改全局 $bar
}
$bar = 'original';
foo();
echo $bar; // 'changed' —— global 修改生效
function bar() {
$GLOBALS['baz'] = 'changed';
}
$baz = 'original';
bar();
echo $baz; // 'changed' —— $GLOBALS 修改生效
function foo(Config $config) { ... }define('DB_HOST', 'localhost'); 或類常量 Config::DB_HOST。PHP 的全局變量與 C 不同,在函數中必須聲明為 global 才能訪問。
$GLOBALS 是一個超全局數組,包含所有全局變量的引用,自 PHP 3 起可用。