在 PHP 開發中,當多個檔案透過 include 依序載入時,常會遇到最後一個檔案內的函式無法透過 global 關鍵字存取全域變數的情況。這是一個經典的作用域問題,許多開發者初次遇到時會感到困惑。
假設有兩個檔案:
<?php $aa = 1; ?>
<?php
include 'a.php';
function show() {
global $aa;
var_dump($aa);
}
?>
執行結果會顯示 null,而非預期的 1。這是因為 include 發生在函式外部,但全域變數的宣告卻在被包含的檔案中,導致作用域鏈斷裂。
最可靠的做法是直接使用 $GLOBALS 超全域陣列來定義與存取跨檔案共享的變數。修改 a.php 如下:
<?php $GLOBALS['aa'] = 1; ?>
接著在任何被包含檔案的函式或方法中,即可透過 $GLOBALS['aa'] 正確讀寫該變數,不再受限於 global 關鍵字的作用域限制。
$GLOBALS 是 PHP 內建的超全域變數,在腳本的任何位置都可直接存取,無需宣告。$GLOBALS['key'] 寫法。global $var 搭配多層 include,維護成本高且易出錯。掌握這項技巧,能有效解決 PHP 多檔案包含時的變數作用域難題,提升代碼健壯性。