2012-02-11 109 views
0

我在這裏有一個簡單的問題。是否存在被引用的函數的參數傳遞變量像之間的差異:php通過參考差異

function do_stuff(&$a) 
{ 
    // do stuff here... 
} 

,做它的函數裏面,如:

function do_stuff($a) 
{ 
    $var = &$a; 
    // do stuff here... 
} 

什麼是使用這兩者之間的差異(如果有的話) ?。另外,任何人都可以給我一個很好的教程,解釋通過引用?我似乎無法100%把握這個概念。

謝謝

回答

1

下面是一組示例,您可以看到每個問題會發生什麼。 我還添加了第三個功能,它結合了你的兩個問題,因爲它也會產生不同的結果。

function do_stuff(&$a) 
{ 
    $a = 5; 
} 

function do_stuff2($a) 
{ 
    $var = &$a; 
    $var = 3; 
} 

function do_stuff3(&$a) 
{ 
    $var = &$a; 
    $var = 3; 
} 

$a = 2; 
do_stuff($a); 
echo $a; 
echo '<br />'; 

$a = 2; 
do_stuff2($a); 
echo $a; 
echo '<br />'; 

$a = 2; 
do_stuff3($a); 
echo $a; 
echo '<br />'; 
0

在第二個功能,傳遞給函數的$a是傳入的參數,(除非$ a是一個對象)的副本,所以你是一個$var一個參考$a在函數內部,但它仍然與傳遞給函數的變量分開。

假設您使用的是最新版本的PHP,對象也會自動按引用傳遞,因此可能會有所作爲。

+0

我修改了它,參見編輯 – user765368 2012-02-11 03:51:31

+0

通過引用訪問「對象」,這些引用是通過值傳遞的,除非您明確地通過引用傳遞 – newacct 2012-02-11 10:25:25

1

它們完全不等價。在第二個版本中,您正在創建對未定義變量$a的引用,導致$var指向相同的空值。你在第二個版本中對$ var和$ a做的任何操作都不會影響函數以外的任何內容。

在第一個版本中,如果在函數內部更改$ a,則在函數返回後新值將出現在外部。

1

在你的第一個例子,如果你修改$a以任何方式在函數內部,函數外的原始值也將被修改。

在你的第二個例子,不管你做什麼,以$a或其參考$var修改功能外原始值。