php __clone()和"浅层克隆"

Bro*_*ias 7 php clone

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

Bra*_*enP 8

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

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

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


Kin*_*nch 3

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

要创建非吞咽副本,您必须实现__clone(). 这是在克隆后对克隆对象调用的。

public function __clone () {
  $this->myObject = clone $this->myObject;
  // and so on
}
Run Code Online (Sandbox Code Playgroud)