我有一个对象,它是一个基本的树。我需要对其进行深层复制,并发现自己实现了 __clone 方法。成功的代码是:
function __clone() {
$object = new CustomXML($this->rootElement);
foreach ($this->elements as $key => $element) {
$this->elements[$key] = clone $this->elements[$key];
$object->elements[$key] = $this->elements[$key];
}
$object->attributes = $this->attributes;
$object->value = $this->value;
$object->allowHTML = $this->allowHTML;
$object->endTag = $this->endTag;
$object->styles = $this->styles;
$object->childID = $this->childID;
return $object;
}
我的问题是......为什么我必须使用
$this->elements[$key] = clone $this->elements[$key];
$object->elements[$key] = $this->elements[$key];
为什么我不能只使用
$object->elements[$key] = clone $this->elements[$key];
使用第二个仍然会留下对孩子的引用。为什么是这样?$this->elements 中的值属于同一类。