2016-12-15 112 views
1

有此功能通過引用採取$feedback論證和修改它通過一個數組:克隆參照

private function removeEmptyAnswers(&$feedback) 
{ 
    //Do stuff with $feedback 
} 

我想提出的$feedback複製它得到改變之前,記錄它:

private function removeEmptyAnswers(&$feedback) 
{ 
    $feedbackCopy = $feedback; 
    //Do stuff with $feedback 
    MyLog::write(['before' => $feedbackCopy, 'after' => $feedback]); 
} 

這將是花生如果$feedback是按值傳遞的,但它是按引用傳遞,這意味着我的$feedbackCopy也將得到改變..或不?

自嘆不如沒有找到這個解決方案的任何谷歌搜索的30分鐘後。

如何使一個數組,其通過引用傳遞的副本?

+1

'$ feedbackCopy'不會當你改變'$ feedback'改變。 https://3v4l.org/072Pi所以你不需要改變任何東西。 – Yoshi

回答

3

這是不夠的,只是分配陣列另一個變量。

$original = [1, 2, 3]; 
function meh (&$arr) { $copy = $arr; $copy[0] = 'meh'; } 
meh($original); 
var_dump($original); // unchanged 

function meh1(&$arr) { $arr[0] = 'meh'; } 
meh1($original); 
var_dump($original); // changed 

原始數組在這種情況下沒有改變,如你所見。但是如果你改變了論點,它就會如預期的那樣發生變化。

另外,請參閱this question更多的信息,通過AnthonyB的建議。

+0

再次,PHP生成*最不可預期的結果*。謝謝。 –

+1

事實上,正如所見[這裏](http://stackoverflow.com/questions/2840112/php-making-a-copy-of-a-reference-variable)如果複製不參考操作的參考,參考副本不一個參考。 – AnthonyB