2009-08-25 60 views
0

我有這樣的代碼:如何按值複製對象/克隆對象在PHP 5

foreach ($this->configObjects as $k=>$object) 
{ 
    $configObject=$object; 

    //Here I will make a lot of changes to $configObject, however 
    // I want all those changes to be kept only to the local copy of $configObject, 
    // So the next time this foreach loop is run $this->configObjects array will contain 
    // a clean slate of configObject objects which don't have any traces of any 
    // earlier changes that were made to them 
} 

我怎樣才能做到這一點?

回答

6

好吧,你只需clone你的對象。

1

使用複製構造函數。

0

問題1:for each loop by defualt應將值的本地副本放入'$ k => $ object'中 - 任何局部變化的foreach。把'&'通過引用而不是按值傳遞。 Manual

問題2:你可以var_dump對象嗎?它會將你的對象在foreach中轉換爲數組或字符串 - 如果var_dump顯示這樣的結果,那麼你正在調用一個字符串的方法。

0

使用克隆構造或循環通過對象將其分配給輔助。

0

您不必克隆它,因爲您無法在foreach循環中更改Iterable的成員。所以當你做類似

$configObject->name = "whatever"; 

默認情況下它不會對$ this-> configObjects有任何影響。從PHP page

報價:

注:除非數組是被引用,foreach指定數組的一個拷貝,而不是該數組本身運行。

+0

我不確定這是否適用於PHP 5以及不 – 2009-08-26 01:29:53