« 44. 如何定義一個函數? | (回到Blog入口) | 46. 自訂函數的參數預設值 »

45. 什麼是 call by reference

jollen 發表於 October 27, 2006 3:57 PM

在 PHP 裡如果要傳遞參考 (call by address) 的話,有 2 種做法:

1. 呼叫函數時在變數前加上 &,例如:

add(&$x, $y);

此時 add() 的寫法沒有什麼不同:

function add($x, $y) { $x += $y; }

2. 在函數的參數加上 &,例如:

function add(&$x, $y) { $x += $y; }

呼叫時的寫法:

add($x, $y);

這裡有 3 個範例,注意每個範例最後輸出的 $x 與 $y 值:

1.

function add($x, $y) { $x += $y; }
$x = 1; $y = 2; add($x, $y);
echo "x = " . $x . "
" . "y = " . $y;

輸出:

x = 1 y = 2

2.

function add($x, $y) { $x += $y; }
$x = 1; $y = 2; add(&$x, $y); echo "x = " . $x . "
" . "y = " . $y;

輸出:

x = 3 y = 2

3.

function add(&$x, $y) { $x += $y; }
$x = 1; $y = 2; add($x, $y);
echo "x = " . $x . "
" . "y = " . $y;

輸出:

x = 3 y = 2

那麼,可不可以函數與呼叫函數時都加 & 呢?在 PHP 裡是可以的,並不會出錯,例如:

<?php function add(&$x, $y) { $x += $y; }
$x = 1; $y = 2; add(&$x, $y);
echo "x = " . $x . "
" . "y = " . $y; ?>

最後的結果一樣是:

x = 3 y = 2

--jollen

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org