首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 變數作用域與生命週期深度解析

     編輯:PHP 相關知識

理解 PHP 變數作用域是寫出可維護代碼的關鍵。本文系統梳理超級全域變數、常數、全域/區域/靜態變數的差異與陷阱。

六大變數類型對照表

類型可見範圍生命週期典型用途
超級全域變數全腳本、跨檔案請求期間輸入處理、Session、環境資訊
常數全腳本(含 include)腳本執行期間配置值、狀態碼、固定參數
全域變數宣告腳本全域(函式外)腳本執行期間共享狀態(慎用)
區域變數函式/方法內部函式執行期間暫存計算、參數處理
靜態變數函式內部請求期間(跨呼叫保持)遞歸計數、單例模式、快取
類屬性依 visibility 而定物件生命週期OOP 狀態封裝

核心規則與陷阱

1. 函式預設不見全域變數

$x = 10;
function foo() {
    echo $x; // Notice: Undefined variable
}
foo();

解法:global $x; 或 $GLOBALS['x'](不推薦濫用)。

2. global 建立別名而非複製

function bar() {
    global $x;
    $x = 20; // 修改外部變數
}

3. 靜態變數只初始化一次

function counter() {
    static $count = 0;
    return ++$count;
}
echo counter(); // 1
echo counter(); // 2

4. include/require 不創建新作用域

被引入檔案共享呼叫者的作用域,函式內 include 仍受函式作用域限制。

九大超級全域變數速查

  • $GLOBALS:所有全域變數陣列
  • $_SERVER:伺服器/執行環境資訊
  • $_GET、$_POST:HTTP 參數
  • $_COOKIE:Cookie 資料
  • $_FILES:上傳檔案資訊
  • $_ENV:環境變數
  • $_REQUEST:合併 GET/POST/COOKIE(順序受 request_order 影響)
  • $_SESSION:Session 資料

常數 vs 變數關鍵差異

  • 常數一經定義不可修改
  • 常數只接受 bool、int、float、string,不支援 resource/array/object
  • 常數不需要 $ 前綴,慣例全大寫
  • define() 可動態定義,const 僅限編譯期(類常數除外)

現代最佳實踐

  • 優先使用 依賴注入 替代全域狀態
  • 配置值用 .env + vlucas/phpdotenv 管理
  • 單例/快取用靜態屬性或容器管理
  • 嚴格區分 $_GET/$_POST,避免用 $_REQUEST
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved