如何在PHP 5中按值复制对象/克隆对象

时间:2009-08-25 18:46:38

标签: php oop

我有这段代码:

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
}

我该如何做到这一点?

5 个答案:

答案 0 :(得分:6)

嗯,你只需clone你的对象。

答案 1 :(得分:1)

使用复制构造函数。

答案 2 :(得分:0)

问题1:defualt的每个循环应该将值的本地副本放入'$ k => $ object' - 该foreach的本地更改。放一个'&'会通过引用而不是值传递它。 Manual

问题2:你能var_dump对象吗?它使你在foreach中的对象转换成数组或字符串 - 如果var_dump显示这样,你就是在字符串上调用一个方法。

答案 3 :(得分:0)

使用克隆构造或循环遍历对象以将其分配给辅助。

答案 4 :(得分:0)

您不必克隆它,因为您无法在foreach循环中更改Iterable的成员。所以当你做类似的事情时

$configObject->name = "whatever";

它对$ this->没有任何影响;默认情况下为configObjects。

来自PHP page

的引用
  

注意:除非引用了数组,否则foreach将对指定数组的副本进行操作,而不是数组本身。