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

PHP 變數產生與作用域規則:全域、區域、static 與 superglobals

     編輯:PHP 相關知識

PHP 變數無需宣告,首次賦值即建立。作用域規則與 C/C++ 不同:函數內預設只能存取區域變數,全域變數需明確宣告。本文系統說明變數建立、四大作用域、global/$GLOBALS、static、超全域變數。

變數建立規則

  • 以 $ 開頭,區分大小寫 ($var ≠ $Var)
  • 首字元為字母或底線,後接字母數字底線
  • 首次賦值即建立,型別由值決定

四大作用域

作用域範圍存取方式
區域函數/方法內部直接使用 $var
全域腳本最外層、include 檔案函數內需 global $var 或 $GLOBALS['var']
靜態函數內部,跨呼叫保持值static $var = 初值;
超全域任何位置直接使用 $_GET, $_POST, $_SESSION 等

程式碼示範

<?php
$city = '北京'; // 全域變數

function printCity($name) {
    echo "你最喜歡的城市是:$name<br>";
}

function cityA() {
    $city = '廣州'; // 區域變數,遮蔽全域
    printCity($city);
}

function cityB() {
    $city = '深圳';
    printCity($city);
}

function cityC() {
    global $city; // 宣告使用全域 $city
    printCity($city);
}

function counter() {
    static $count = 0; // 僅初始化一次
    $count++;
    echo "呼叫次數: $count<br>";
}

cityA(); // 廣州
cityB(); // 深圳
cityC(); // 北京

counter(); // 1
counter(); // 2
counter(); // 3

// 超全域變數範例
echo "請求方法: {$_SERVER['REQUEST_METHOD']}<br>";
?>

global vs $GLOBALS

特性global $var$GLOBALS['var']
語法關鍵字宣告陣列存取
可讀性明確宣告意圖隱含全域存取
動態變數名不支援支援 ($GLOBALS[$name])
效能略快 (編譯期解析)極微差異

常見誤區

  • 以為 include 檔案自動共享區域變數:include 只是插入程式碼,作用域不變。
  • 在類別方法中用 global 存取屬性:應用 $this->property,global 僅用於腳本層級全域變數。
  • static 變數會被繼承:靜態變數屬於函數本身,子類別覆寫方法會有獨立 static。

最佳實踐

  1. 儘量避免全域變數,改用依賴注入、單例、服務容器。
  2. 函數參數傳遞資料,而非仰賴全域狀態。
  3. 需跨請求持久化資料用 Session/Redis/資料庫,而非 static。
  4. 類別屬性用 private/protected/public 明確可見性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved