PHP - 克隆一个包含对自身的引用的对象?

标签 php oop drupal cloning self-reference

创建包含许多对自身的引用的复杂 PHP 对象的克隆的最佳方法是什么,以便新对象的引用指向它自己的方法和属性,而不是原始对象的方法和属性?

我明白了from the manual $new_object = clone $old_object; 创建一个浅拷贝,将引用保留在原处。所以大概 $new_object 的引用将指向旧对象上的方法?

对该手册页的评论表明 $new_object = unserialize(serialize($old_object)); 是一种创建深拷贝的方法。听起来很有希望,但我不确定这种方法对我的情况到底意味着什么:引用是被转换为指向克隆,还是成为绝对的,或者其他什么,如果确实做了我想要的,它是否是最好的方法。

我想知道是否有既定的标准方法来执行此操作。

(注意:所讨论的对象是一个 Drupal Views 对象,但这个问题一般是关于 PHP 对象的:这个对象唯一重要的特征是,它很大,并且包含许多对自身的引用如果您尝试导航整棵树,则递归。)

最佳答案

一个简单的测试将揭示发生了什么:

$old = new stdClass();
$old->foo = 'bar';
$old->baz = &$old;

print_r($old);

$new = unserialize(serialize($old));

$new->foo = 'new';

print_r($new);
print_r($new->baz->foo);

此代码表明 self-ref 现在指向克隆。 http://codepad.org/dSnZ5I10

关于PHP - 克隆一个包含对自身的引用的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076258/

相关文章:

php - $_FILE 文本字段名称索引无法识别

C++ 虚函数基返回类型建议

c# - 如何在子类中覆盖 .NET Framework 类的属性?

jquery - Drupal/jQuery/CSS::Wrap 单选按钮标签在 span 标签中?

php - PHP数组中的内存优化

php - ZF2 getServiceLocator() 未找到?

c++ - 如何防止用户破坏对象

php - Drupal 7 中的条件字段组/字段集

drupal - 如何摆脱 Drupal CSS 样式表?

php - 如何选择 mysql 中的最新条目?