PHP 的參考運算子 & 讓多個變數指向同一記憶體位址,實現「寫時複製」機制。本文系統整理變數參考、函式參考傳遞、參考回傳、物件參考與 unset 行為。
<?php
$a = 100;
$b = &$a; // $b 參考 $a
$a++;
echo $b; // 101,兩者共用同一記憶體
?>
預設為傳值;加上 & 才是傳址。
function foo(&$val1, $val2) {
$val1++; // 影響外部變數
$val2++; // 僅影響區域副本
}
$a = 5; $b = 10;
foo($a, $b);
echo $a; // 6
echo $b; // 10
function &find_var($param) {
// ... 邏輯
return $found_var; // 回傳變數參考
}
$foo =& find_var($bar); // 必須雙端都加 &
$foo->x = 2; // 修改原變數
class A { public $abc = "ABC"; }
$b = new A();
$c = $b; // PHP 5 預設即為參考複製
$c->abc = "DEF";
echo $b->abc; // DEF,兩者指向同一物件
若需獨立副本,請使用 clone:$c = clone $b;
$a = 1;
$b =& $a;
unset($a); // 僅解除 $a 綁定,$b 仍存在且值為 1
global $var; // 等同於
$var =& $GLOBALS['var'];
& 節省記憶體。&。