我有一個對象,做一些事情,並返回像這樣的對象的靜態函數:傳遞對象的功能在PHP
$objectA = ObjectA::getItem();
然後我有一個功能,使得其他類型的對象,並返回一個陣列其中,這些類型的對象的一部分,需要$objectA
,所以它被傳遞中,像這樣:
$arrayOfObjectB = ObjectB::getStuff($objectA);
在構建$arrayOfObjectB
我改變$objectA
的一部分,這將是$objectB
的一部分。
事情是這樣的:
public static function getStuff($objectA)
{
$arrayOfObjectB = array();
foreach(...loops through some stuff)
{
$objectA->setSomething($variableChangedDuringLoop);
$objectB = new ObjectB($objectA);
$arrayOfObjectB[] = $objectB;
}
}
什麼情況是,所有在$arrayOfObjectB
的$objectA->something
將已設定爲同樣的事情,在循環的最後一個項目,我想發生這樣對於$something
在循環中保存單獨的值。
我可以在循環過程中每次克隆對象,然後設置它們,這是可行的。 但是這種方法似乎是錯誤的。
我已經這麼做了,正如我在問題結尾處提到的那樣,可能應該早一點提到這種方式,對此感到抱歉。我的問題基本上是否有比克隆對象更好的方法? – user2209644
沒有。就是這個方法。製作一個克隆。這沒有錯。如果你需要一個完整的數組填充不同狀態的對象,它們不能都是同一個實例。對於大小爲n的數組,您需要n個獨立的實例。沒辦法。如果您希望代碼看起來更清晰一些,則可以將克隆操作提取爲單獨的方法。 – Asaph
好吧,現在有道理,謝謝一堆 – user2209644