如何解决在__clone中获取原始/源实例
PHP是否有可能在__clone
方法中获取原始源实例/对象?
不保存$this
或之前的哈希/ 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()
方法,以允许需要被改变。
正如Felippe 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。