$originalTags = $task->getTags();
$task->removeTag($tag1);
然後$tag1
也在$originalTags
刪除。所以ArrayCollections的分配是通過引用完成的,我怎樣才能將它克隆到一個新的ArrayCollection?
$originalTags = $task->getTags();
$task->removeTag($tag1);
然後$tag1
也在$originalTags
刪除。所以ArrayCollections的分配是通過引用完成的,我怎樣才能將它克隆到一個新的ArrayCollection?
您可以簡單地使用本地PHP clone
爲object cloning。
$originalTags = $task->getTags();
$task2 = clone $task;
$task2->removeTag($tag1);
我可能會在解決方案已經發現自己,但我不知道這是否會導致任何問題,因爲我可能會丟失數據:
$originalTags = new ArrayCollection($task->getTags()->toArray());
而不是每次你需要getTags時間單獨處理這個問題( ),從getTags而不是參考返回一個克隆。
public function getTags(){
return new ArrayCollection($this->tags->toArray());
}
,或者如果你需要保留通過引用傳遞getTags的功能,創建一個新的功能getClonedTags或變量傳遞給get函數將選擇返回克隆的標籤。
public function getTags($cloned = false){
if($cloned){
return new ArrayCollection($this->tags->toArray());
}
return clone $this->tags;
}
http://php.net/manual/en/language.oop5.cloning.php – DrKey
$任務是學說的實體嗎? – JackalopeZero
@drkey很酷,很容易,你可以發表這個答案 – Asara