PHP 中變數預設為區域作用域,函數內無法直接存取外部變數。理解 global、$GLOBALS 及 static 的差異,是掌握變數生命週期的關鍵。
在函數內宣告 global $var,將建立對全域變數的引用:
<?php
$name = 'why';
function changeName() {
global $name;
$name = 'what';
}
changeName();
echo "my name is $name"; // 輸出: my name is what
?>
注意:若函數內先賦值再宣告 global,會導致邏輯錯誤。
PHP 將所有全域變數存放於 $GLOBALS 陣列,鍵名為變數名稱:
<?php
$a = 1;
$b = 2;
function sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
sum();
echo $b; // 輸出: 3
?>
優點:無需逐個宣告,可動態存取變數名。
函數內使用 static 讓變數在呼叫間保持值:
<?php
function counter() {
static $count = 0;
$count++;
echo $count . '<br>';
}
counter(); // 1
counter(); // 2
counter(); // 3
?>
define('CONFIG', value) 適合唯讀全域資料<?php $var1 = 1; $var2 = 2; $GLOBALS['var3'] = &$var1; // 建立引用 $var1 = 10; echo $GLOBALS['var3']; // 10 unset($GLOBALS['var3']); // 僅移除引用,不影響 $var1 ?>
掌握變數作用域機制,能撰寫更清晰、可預測的 PHP 程式碼。