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

PHP 全域變數 global、$GLOBALS 與靜態變數 static 深度解析

     編輯:PHP 相關知識

變數作用域基礎

  • 全域作用域:腳本主體、include/require 檔案(不含函數/類別內部)。
  • 區域作用域:函數/方法內部。預設只能存取區域變數。

global 關鍵字

在函數內宣告 global $var,建立指向全域變數的區域別名(參考)。

global 陷阱:include 內的函數

解決:在真正全域作用域 include,或使用 $GLOBALS。

$GLOBALS 超全域陣列

直接存取全域符號表,非別名、非參考,任何作用域皆可直接讀寫真正的全域變數。

static 靜態變數

  • 僅在函數/方法內部聲明:static $var = 0;
  • 生命週期贯穿整個腳本執行,但作用域僅限該函數。
  • 保持值跨越多次呼叫。

static 與 global 差異

特性global $varstatic $var
作用域全域(透過別名存取)僅宣告函數內部
生命週期腳本結束腳本結束
初始化引用既有全域變數僅首次呼叫初始化
跨函數共享是(同一全域變數)否(各函數獨立)

類別靜態屬性

最佳實務建議

  1. 避免 global:增加耦合、難測試。優先傳參數、依賴注入、單例模式。
  2. 需全域存取用 $GLOBALS:明確語意、無別名陷阱。
  3. 函數內需持久狀態用 static:計數器、快取、單例內部實例。
  4. 類別層級共享狀態用 static 屬性:配合 self::、static::(晚期靜態綁定)。

結語

理解 global(別名參考)、$GLOBALS(直接存取)、static(函數內持久)三者在作用域、生命週期、初始化時機上的根本差異,能避免 include 作用域陷阱、跨函數狀態洩漏等難以除錯的問題。現代 PHP 開發以依賴注入取代全域狀態為主流。

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