php - 在 __clone() 中获取原始/源实例
问题描述
php中是否有可能在__clone
方法中获取原始源实例/对象?
没有保存$this
或者之前是哈希/ID。
我尝试使用$this
和回溯,但都返回新/克隆的实例。
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)
推荐阅读
- ios - “'(CLLocationManager, [CLLocation]) -> ()' 类型的值没有成员 'delegate'” 快速映射错误
- python - ImportError:无法导入测试模块
- angular - Angular 8 Reactive Form:复选框不可点击
- r - 如何在R中匹配模式后提取一定长度的子字符串?
- go - 通过 reflect.Value.SetString 设置新字符串
- big-o - 嵌套循环的大 O (int j = 0; j < i; j++)
- java - 将按钮图形与图像进行比较
- python - 使用多线程调度非周期性事件
- vue.js - 是否可以在渲染时查询数据并返回结果
- variables - Github Action - 在脚本中使用变量