在__clone()中获取原始/源实例



php中是否有可能在__clone方法中获取原始源实例/对象?

不保存$this或之前的hash/id。

我尝试使用$this和backtrace,但两者都返回了新的/克隆的实例。

class Cl
{
public function __clone() {
var_dump(spl_object_id(debug_backtrace()[0]['object'])); // returns int(2)
var_dump(spl_object_id($this)); // returns int(2)

// how to get the original/source instance, ie. int(1), here?
}
}

$cl = new Cl();
var_dump(spl_object_id($cl)); // returns int(1)
var_dump(spl_object_id(clone $cl)); // returns int(2)

克隆完成后,如果定义了__clone()方法,则将调用新创建的对象的__clone()方法,以允许更改任何必要的属性。

正如Felipe Duarte所提到的,您可以设置原始对象实例并使用它:

class Cl
{
//private $original;

public function __construct() {
$this->original = $this;
}
public function __clone() {
var_dump(spl_object_id($this->original)); // returns int(1)
}
}
$cl = new Cl();
var_dump(spl_object_id($cl)); // returns int(1)
var_dump(spl_object_id(clone $cl)); // returns int(2)

最新更新