在函數內宣告 global $var,建立指向全域變數的區域別名(參考)。
解決:在真正全域作用域 include,或使用 $GLOBALS。
直接存取全域符號表,非別名、非參考,任何作用域皆可直接讀寫真正的全域變數。
static $var = 0;| 特性 | global $var | static $var |
|---|---|---|
| 作用域 | 全域(透過別名存取) | 僅宣告函數內部 |
| 生命週期 | 腳本結束 | 腳本結束 |
| 初始化 | 引用既有全域變數 | 僅首次呼叫初始化 |
| 跨函數共享 | 是(同一全域變數) | 否(各函數獨立) |
理解 global(別名參考)、$GLOBALS(直接存取)、static(函數內持久)三者在作用域、生命週期、初始化時機上的根本差異,能避免 include 作用域陷阱、跨函數狀態洩漏等難以除錯的問題。現代 PHP 開發以依賴注入取代全域狀態為主流。