php __clone()和“浅层克隆”

时间:2011-04-27 19:25:38

标签: php clone

当__clone()的结果是“浅克隆”时是什么意思?

2 个答案:

答案 0 :(得分:8)

这意味着当克隆对象时,作为引用变量的任何属性(引用其他对象而不是值的变量)将保持引用。

“非浅”克隆会将新对象设置为这些属性的值,而不是将它们作为引用。

注意:这意味着您对克隆对象中的这些引用所做的任何更改也将对它们在“父”对象中引用的值进行更改。

答案 1 :(得分:3)

简而言之:克隆将与克隆的原始对象保持相同的引用。像字符串或整数这样的原始类型永远不会引用(在php中),如果你完全改变一个引用(通过用另一个引用替换属性的对象),这也不会影响原始对象。每个属性都将包含相同的,而不仅仅是相同的对象,而不是另一个对象的同名属性。

要创建非吞下副本,您必须实现__clone()。克隆后在克隆对象上调用它。

public function __clone () {
  $this->myObject = clone $this->myObject;
  // and so on
}