跨多文件 include 時,函數內 global $var 無法引用頂層定義的變量,輸出 NULL。根因是 include 在函數作用域內執行時,會創建新的局部符號表,導致 global 關鍵字綁定到錯誤作用域。
// a.php
// b.php
global $aa 在當前編譯作用域創建對全局符號表 $GLOBALS['aa'] 的引用。include 發生在函數內部,被包含文件的代碼在函數作用域編譯,其頂層變量成為函數局部變量,而非真正全局變量。global $aa 尋找的是全局符號表,實際變量卻在函數局部符號表,故找不到。// a.php
// b.php
$GLOBALS 是超全局變量,任何作用域均可直接訪問,不受 include 執行上下文影響。
$GLOBALS['key']** 讀寫。include 業務邏輯文件;改用 require_once 在頂層載入。這是 PHP 早期設計遺留的作用域陷阱,理解機制後,$GLOBALS 是最簡單可靠的修復手段。