gpt4 book ai didi

php - $this->myObject = clone $this->myObject;

转载 作者:搜寻专家 更新时间:2023-10-31 21:09:10 29 4
gpt4 key购买 nike

我对 PHP 中的对象克隆有疑问。我知道克隆创建了一个“深拷贝”,因为创建了一个新对象,其变量初始化为克隆它的对象中相应变量的值。然而,as discussed here ,这意味着任何引用变量都将引用相同的值,可能会产生问题。

我正在阅读的书给出了以下解决方案,类似于上面链接给出的解决方案:

class ReferenceClass {
public $msg = 'Reference Object';
}

class CloneClass {
public $refObj;

public function __construct() {
$this->refObj = new ReferenceClass();
}

public function __clone() {
$this->refObj = clone $this->$refObj;
}
}

但是,尽我所能,我无法理解这一行发生的事情:

    $this->refObj = clone $this->$refObj;

任何人都可以发出的光将是一个巨大的帮助。

最佳答案

好问题。

您指出的行是克隆引用的对象,因此避免了双指针问题。

因此,_clone 方法不仅克隆对象本身,还克隆所有引用的对象。

例如,如果您有一个 ID 为 1 的汽车对象,它引用了一个 ID 为 1 的引擎对象,那么在克隆之后,您将拥有一辆由 2 标识的新汽车和一个由 2 标识的新引擎。如果没有 _clone 扩展,您将拥有一辆由 2 标识的汽车引用由 1 标识的发动机。

请注意,只有具有非原始类型作为属性的对象才需要魔术克隆。

关于php - $this->myObject = clone $this->myObject;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312444/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com