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

PHP 超全域變數 $GLOBALS 與 global 關鍵字的差異深度解析

     編輯:PHP 相關知識

超全域變數 $GLOBALS

包含所有全域變數的關聯陣列,鍵名即變數名。函數內部可直接存取 $GLOBALS['var'] 讀寫真正的全域變數。

global 關鍵字

在函數內建立指向全域變數的別名,非真正的全域變數本體。別名僅存在於函數作用域,unset() 僅銷毀別名,不影響外部原變數。

行為差異實測

$var1 = 5; $var2 = $var3 = 0;

function t1() { global $var1, $var2; $var2 =& $var1; }
function t2() { $GLOBALS['var3'] =& $GLOBALS['var1']; }

t1(); echo $var2 . "\n"; // 0 (別名綁定時 $var1 尚未修改?實測為 0)
t2(); echo $var3 . "\n"; // 5 (直接參考 $GLOBALS['var1'])

// 另一測試
$var1 = 1;
function t1() { global $var1; $var1 = 2; unset($var1); }
function t2() { $GLOBALS['var1'] = 3; unset($GLOBALS['var1']); }
t1(); echo $var1 . "\n"; // 2 (外部變數被修改,unset 僅移除別名)
t2(); echo $var1 . "\n"; // 無輸出 (全域變數本體已銷毀)

總結

特性$GLOBALS['var']global $var
本質真正的全域變數指向全域變數的別名 (引用)
unset 影響銷毀全域變數本體僅銷毀函數內別名
跨檔案 include適用適用
類別成員存取不可用 (需用 $this->)不可用

$GLOBALS 為超全域變數,無需 global $GLOBALS 即可在函數內直接使用。

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