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

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

     編輯:PHP 相關知識

變數作用域基礎

PHP 中變數預設為區域作用域,函數內無法直接存取外部變數。理解 global、$GLOBALS 及 static 的差異,是掌握變數生命週期的關鍵。

1. global 關鍵字

在函數內宣告 global $var,將建立對全域變數的引用:

<?php
$name = 'why';

function changeName() {
    global $name;
    $name = 'what';
}

changeName();
echo "my name is $name"; // 輸出: my name is what
?>

注意:若函數內先賦值再宣告 global,會導致邏輯錯誤。

2. $GLOBALS 超全域陣列

PHP 將所有全域變數存放於 $GLOBALS 陣列,鍵名為變數名稱:

<?php
$a = 1;
$b = 2;

function sum() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

sum();
echo $b; // 輸出: 3
?>

優點:無需逐個宣告,可動態存取變數名。

3. 靜態變數 static

函數內使用 static 讓變數在呼叫間保持值:

<?php
function counter() {
    static $count = 0;
    $count++;
    echo $count . '<br>';
}

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

4. 常見陷阱與最佳實踐

  • 避免濫用全域變數:增加耦合度,難以測試與維護
  • 傾向依賴注入:透過參數傳遞所需資料
  • 單例模式替代:共享資源時使用類靜態屬性
  • 常數替代配置:define('CONFIG', value) 適合唯讀全域資料

5. 進階:引用賦值與全域陣列

<?php
$var1 = 1;
$var2 = 2;
$GLOBALS['var3'] = &$var1; // 建立引用

$var1 = 10;
echo $GLOBALS['var3']; // 10

unset($GLOBALS['var3']); // 僅移除引用,不影響 $var1
?>

掌握變數作用域機制,能撰寫更清晰、可預測的 PHP 程式碼。

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