首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

PHP 中 global 與引用傳遞的區別深度解析

     編輯:程式設計疑難解答

核心結論

兩者都能在函數內部修改外部變量,但 作用機制、作用域、性能影響 截然不同。

1. global 關鍵字

  • 機制:將全局符號表中的變量引入當前函數的局部符號表,實質是給全局變量起了一個「局部別名」。
  • 作用域:僅影響當前函數;若在類方法中使用,需配合 $GLOBALS 數組或 global $var。
  • 副作用:過度使用會導致代碼耦合度高、難以測試、命名空間污染。

2. 引用傳遞

  • 機制:函數參數定義為 &$var,調用時傳遞變量的內存地址,函數直接操作原變量內存。
  • 作用域:不限於全局變量,任何作用域的變量均可傳引用。
  • 優勢:語義明確、參數流向清晰、便於單元測試、避免全局狀態污染。

代碼對比

<?php
$globalVar = 10;
$refVar    = 20;

function useGlobal() {
    global $globalVar;
    $globalVar += 5;   // 修改全局變量
}

function useRef(&$val) {
    $val += 5;         // 修改實參
}

useGlobal();
useRef($refVar);

echo $globalVar; // 15
echo $refVar;    // 25
?>

最佳實踐建議

  1. 優先使用 引用傳遞 或 返回值 實現數據流向,保持函數純粹。
  2. 極少數情況(如框架啟動階段加載配置)可用 global 或 $GLOBALS,但需加註釋說明原因。
  3. 避免在循環、遞歸中濫用 global,防止性能下降與邏輯混亂。

理解二者本質區別,能寫出更健壯、可維護的 PHP 代碼。

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