include/require 引入文件亦可見。函數內需用 global $var 或 $GLOBALS['var'] 訪問。static $var,函數調用間保持值不銷毀。$b = &$a 使 $a、$b 指向同一記憶體內容(非 C 指標)。修改任一變量,另一同步變化。
函數傳址調用:function test(&$a),實參必須為變量(不可為常量/表達式)。
函數引用返回:function &test(),調用時 $a = &test() 獲取引用,修改 $a 影響函數內靜態變量。
PHP 5 起,$obj2 = $obj1 為引用賦值(等同 $obj2 = &$obj1),修改屬性相互影響。需獨立副本請用 clone 並可選實作 __clone() 魔術方法調整副本屬性。
class A { public $abc = "ABC"; }
$b = new A; $c = $b; $d = clone $b;
$b->abc = "DEF";
echo $c->abc; // DEF (引用)
echo $d->abc; // ABC (獨立副本)
& 節省記憶體。unset($ref) 僅斷開變量名與內容綁定,不銷毀內容(其他引用仍有效)。global $var 實為建立到 $GLOBALS['var'] 的引用。$this 永遠是調用對象的引用。Zend 引擎實現:$b = $a 最初指向同一記憶體;只有發生寫入操作(如 $a = "new")時,才為 $b 分配新記憶體並複製數據。這解釋了 foreach 唯讀極快、寫入較慢的原因。