当__clone()的结果是“浅克隆”时是什么意思?
答案 0 :(得分:8)
这意味着当克隆对象时,作为引用变量的任何属性(引用其他对象而不是值的变量)将保持引用。
“非浅”克隆会将新对象设置为这些属性的值,而不是将它们作为引用。
注意:这意味着您对克隆对象中的这些引用所做的任何更改也将对它们在“父”对象中引用的值进行更改。
答案 1 :(得分:3)
简而言之:克隆将与克隆的原始对象保持相同的引用。像字符串或整数这样的原始类型永远不会引用(在php中),如果你完全改变一个引用(通过用另一个引用替换属性的对象),这也不会影响原始对象。每个属性都将包含相同的,而不仅仅是相同的对象,而不是另一个对象的同名属性。
要创建非吞下副本,您必须实现__clone()
。克隆后在克隆对象上调用它。
public function __clone () {
$this->myObject = clone $this->myObject;
// and so on
}