php“uuu clone()和”;“浅克隆”;

php“uuu clone()和”;“浅克隆”;,php,clone,Php,Clone,当_clone()的结果是“浅克隆”时意味着什么?这意味着克隆对象时,作为引用变量(引用其他对象而不是值的变量)的任何属性都将保留引用 “非浅层”克隆会将新对象的属性设置为这些属性的值,而不是将它们作为引用 注意:这意味着您对克隆对象中的这些引用所做的任何更改也将对它们在“父”对象中引用的值进行更改。简而言之:克隆将保留与从中克隆的原始对象相同的引用。字符串或整数之类的基本类型永远都不是引用(在php中),如果完全更改一个引用(通过将属性的对象替换为另一个),这也不会影响原始对象。每个属性都将包

当_clone()的结果是“浅克隆”时意味着什么?

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

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


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

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

要创建非吞咽拷贝,必须实现
\uu clone()
。克隆后,将对克隆对象调用此函数

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

“注意”是错误的:只有对克隆对象(即引用)的属性/值的每次更改都会影响原始对象。基本类型从来都不是引用,如果你用另一个对象替换一个对象,这也只会影响一个对象,而不会影响另一个。是的,这就是我的意思。澄清。