| 類型 | 可見範圍 | 生命週期 | 典型用途 |
|---|---|---|---|
| 超全域變數 | 腳本任何位置、跨頁面(Session) | 請求期間 / Session 期間 | $GLOBALS, $_SERVER, $_POST, $_GET, $_COOKIE, $_SESSION, $_REQUEST, $_FILES, $_ENV |
| 常數 | 全域(僅限當前腳本及 include 檔案) | 腳本執行期間 | define() 定義的設定值 |
| 全域變數 | 腳本全域,但函數內需 global 宣告 | 腳本執行期間 | 設定參數、共享資源 |
| 靜態變數 | 僅限宣告的函數內部 | 請求期間(跨函數呼叫保持值) | 遞迴計數、單例模式、快取 |
| 區域變數 | 僅限宣告的函數/區塊內部 | 函數執行期間 | 暫存計算中間值 |
$a = 1;
function Test() { echo $a; } // 無輸出,因 $a 為區域變數且未初始化
Test();
global 關鍵字引入全域變數$url = "www.example.com";
function DisplayUrl() {
global $url;
echo $url; // 正常輸出
}
DisplayUrl();
$GLOBALS 超全域陣列替代 global$a = 1; $b = 2;
function Sum() { $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; }
Sum(); echo $b; // 3
function Counter() {
static $count = 0;
echo $count++;
}
Counter(); // 0
Counter(); // 1
Counter(); // 2
function Recurse() {
static $count = 0;
$count++;
echo $count;
if ($count < 10) Recurse();
$count--;
}
Recurse(); // 輸出 1 2 3 ... 10 9 ... 1
function Foo() {
static $int = 0; // 正確
static $int = 1 + 2; // 錯誤:運算式不允許
static $int = sqrt(121); // 錯誤:函數呼叫不允許
}
函數簽名中的參數屬區域變數,函數結束即銷毀,外部不可存取。
$GLOBALS — 所有全域變數陣列$_SERVER — 伺服器環境變數$_POST — POST 表單資料$_GET — URL 參數$_COOKIE — Cookie 資料$_FILES — 上傳檔案資訊$_ENV — 環境變數$_REQUEST — 合併 GET/POST/COOKIE$_SESSION — Session 資料global:改用依賴注入、單例、或傳遞參數,降低耦合。static $var 僅在當前請求有效。global:直接在函數內使用 $_POST['key'] 即可。