やや基本的なツリーであるオブジェクトがあります。私はそれの深いコピーを作成する必要があり、__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];
2番目のものを使用しても、子への参照が残ります。どうしてこれなの?$this->elementsの値は同じクラスです。