我有这段代码:
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
}
我该如何做到这一点?
答案 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将对指定数组的副本进行操作,而不是数组本身。