| 宣告方式 | 呼叫方式 | 行為 | 外部變數影響 |
|---|---|---|---|
function foo(&$x) | $y = foo($a) | 值傳回(複製) | $a 被修改,$y 為獨立副本 |
function &foo(&$x) | $y = &foo($a) | 參考傳回(別名) | $a、$y、函式內 $x 綁定同一記憶體 |
流程: $a(1) → 參考傳入 b() → $c 變 2 → 回傳值 2 給 $d → $d++ 變 3 → $a 保持 2。
流程: $a(1) → 參考傳入 b() → $c 變 2 → 回傳參考綁定 $d → $d++ 導致 $a/$c/$d 同步變 3。
範例 1(值回傳):
$a ─────┐
├──► 記憶體位址 0x100 (值 2)
$c ─────┘ (函式結束後釋放)
$d ────────────► 記憶體位址 0x200 (值 3,獨立副本)
範例 2(參考回傳):
$a ──────────────┐
$c (函式內) ─────┼──► 同一記憶體位址 0x100 (值 3)
$d (外部) ───────┘
$obj->setName('A')->setAge(20) 內部 return $this 即參考回傳。&。function &foo() 與呼叫 $x = &foo() 缺一不可。