2012-01-07 73 views

回答

8

這意味着它通過引用傳遞而不是值... IE對變量的任何操作都會影響原始。這與任何修改不影響原始對象的值不同。

這是問了很多次的計算器。

+1

要添加,「通過引用」意味着它指的是該變量的相同分配的內存塊被稱爲 – Prof83 2012-01-07 11:27:09

+1

爲反對「按價值」,這意味着變量的副本是由PHP在新的內存塊中創建的。 – Kaii 2012-01-07 11:34:14

+0

有的基準是如何在問題的示例代碼傳遞兩種方式,[I概述了兩個](http://stackoverflow.com/a/8769347/367456)。 – hakre 2012-01-07 11:37:07

4

它是用來在數組的單個實例更改應用到主陣列..

由於:

//現在的變化不會影響陣列$ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

,但現在改變將在數組$ wishesarray反映也

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

這個例子會告訴你區別

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

退房爲此這裏的PHP文檔:http://pl.php.net/manual/en/control-structures.foreach.php

+0

不將_by reference_語法往往造成像錯誤:「不能創建從字符串偏移/引用」? – 2017-07-19 08:57:46

1

對於你的問題的代碼,有可能是因爲給予內foreach循環是空的沒有明確的答案。

我用你的代碼是看到,內foreach遍歷一個參考,而不是常見的方式是什麼。

我建議你把foreach PHP Manual page的讀,它涵蓋了所有四種情況:

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question