【发布时间】:2011-08-14 03:29:07
【问题描述】:
__clone() 的结果是“浅克隆”是什么意思?
【问题讨论】:
__clone() 的结果是“浅克隆”是什么意思?
【问题讨论】:
这意味着当对象被克隆时,任何作为引用变量(引用其他对象而不是值的变量)的属性都将保持引用。
“非浅层”克隆会将新对象设置为这些属性的值,而不是将它们作为引用。
注意:这意味着您对克隆对象中的这些引用所做的任何更改也会对它们在“父”对象中引用的值进行。
【讨论】:
简而言之:克隆将保持与克隆它的原始对象相同的引用。像字符串或整数这样的原始类型永远不是引用(在 php 中),如果您完全更改一个引用(通过将属性的对象替换为另一个引用),这也不会影响原始对象。每个属性都将包含 same 而不仅仅是 identical 对象,而不是另一个对象的同名属性。
要创建非燕子副本,您必须实现 __clone()。克隆后在克隆对象上调用。
public function __clone () {
$this->myObject = clone $this->myObject;
// and so on
}
【讨论】: