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

PHP 變量作用域深度解析:局部、全局與 global 關鍵字實戰

     編輯:PHP 綜合知識

徹底搞懂 PHP 變量作用域:從困惑到掌握

變量作用域是 PHP 初學者最易踩坑的概念之一。本文通過對比代碼,清晰演示局部變量、全局變量與 global 關鍵字的行為差異,幫助建立正確的心智模型。

陷阱案例:看似同名,實則無關

<?php
$a = 1;
$b = 2;
function sum() {
    $a;
    $b;
    $b = $a + $b;
}
sum();
echo $b; // 輸出 2,而非預期的 3
?>

原因:函數內部的 $a、$b 是新建的局部變量,與外部同名變量毫無關係。函數結束時局部變量銷毀,外部 $b 保持原值 2。

解決方案:global 關鍵字引入外部引用

<?php
$a = 1;
$b = 2;
function sum() {
    global $a, $b; // 聲明使用全局變量
    $b = $a + $b;
}
sum();
echo $b; // 輸出 3
?>

global $a, $b 在函數內部創建對全局同名變量的引用,而非複製。修改即影響全局。

核心規則總結

  1. 函數內部默認創建局部作用域,無法直接訪問外部變量。
  2. global 關鍵字 將全局變量引入當前局部作用域(按引用)。
  3. $GLOBALS 超級全局數組 可在任何位置直接訪問全局變量:$GLOBALS['b'] = 3。
  4. 靜態變量 (static) 僅在函數內部可見,但生命週期贯穿腳本。
  5. 類成員變量 屬於對象作用域,通過 $this->var 訪問,與全局/局部無關。

最佳實踐建議

  • 盡量避免使用 global:增加耦合,難以測試。優先通過參數傳遞、返回值、依賴注入、單例模式等方式傳遞數據。
  • 函數參數化:function sum($a, $b) { return $a + $b; } 更清晰、可測試、可復用。
  • 必要時用 $GLOBALS:如框架核心、舊代碼兼容,明確表達「有意使用全局」。

理解作用域,是寫出可維護 PHP 代碼的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved