基本語法
<?php
$a = 1;
$b = 2;
function Sum() {
global $a, $b; // 聲明使用全局變量
$b = $a + $b;
}
Sum();
echo $b; // 輸出 3
?>
核心機制
global $var 在函數內創建一個指向全局符號表中 $var 的引用(別名)。
- 對
$var 的修改直接影響全局變量。
- 可一次聲明多個:
global $a, $b, $c;
對比:global vs $GLOBALS
| 方式 | 語法 | 特點 |
| global | global $a; | 創建引用,語法簡潔,僅限函數內 |
| $GLOBALS | $GLOBALS['a'] | 超全局陣列,任何作用域可用,無需聲明 |
<?php
$a = 10;
function test() {
$GLOBALS['a'] = 20; // 直接修改全局
}
test();
echo $a; // 20
?>
常見誤區
- 函數參數同名:
function foo($a) { global $a; } 會導致致命錯誤(參數與 global 同名衝突)。
- 靜態變量:
static $a 與 global $a 完全不同,static 保持函數內部狀態,不關聯全局。
- 類成員:類屬性用
$this->prop,非 global。
最佳實踐
- **盡量減少全局變量使用**,增加耦合、難測試、難維護。
- 優先通過**參數傳遞**、**依賴注入**、**單例/服務容器**共享狀態。
- 必須用全局時,集中在配置類/常量類中,命名規範(如
$GLOBALS['APP_CONFIG'])。
- 避免在 include 文件中隱式依賴全局變量,導致上下文敏感。