php 浅复制与深复制
来源:互联网 发布:一句话自我介绍 知乎 编辑:程序博客网 时间:2024/06/04 20:14
自PHP5起,new运算符自动返回一个引用,一个 对象变量 已经不再保存整个对象的值,只是保存一个标识符来访问真正的对象内容。当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。
项目中 为一个变量赋值一个对象时 后续对象改变时会同时改变赋值的对象
浅复制:使用clone来复制对象,这种复制叫做“浅复制“,被赋值对象的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:被复制的对象的所有的变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。
默认使用 clone 是进行一个浅复制,那么如何才能进行深复制呢?
方式一:利用__clone方法
public function __clone(){ $this->obj = new Obj();}
这种方式非常直观,但是却有一个很麻烦的操作方式,就是当类中包含多个引用时,你就需要在__clone方法中逐个重新设置。而且还要处理一些循环引用的问题。是很复杂的。
方式二:序列化反序列化(冷藏与解冻)
$tmp = serialize($ex1);$ex2 = unserialize($tmp);
这时候得到的$ex2就是一个全新的对象,这个过程在Java中也叫作”冷藏“与”解冻“过程。
序列化是一个递归的过程,我们不需要理会被对象内部引用了多少个对象以及引用了多少层对象,我们都可以彻底的复制。
阅读全文
1 0
- PHP中的浅复制与深复制
- PHP深复制与浅复制
- php 浅复制与深复制
- PHP中的浅复制与深复制
- PHP对象的浅复制与深复制
- PHP对象的深复制与浅复制
- 浅复制与深复制
- 浅复制与深复制
- 深复制与浅复制
- 浅复制与深复制
- 深复制与浅复制
- 深复制与浅复制
- 浅复制与深复制
- 浅复制与深复制
- 浅复制与深复制
- 浅复制与深复制
- 深复制与浅复制
- 浅复制与深复制
- SVN只checkout目录,不包括内容
- BZOJ 2079 [Poi 2010] 图论 解题报告
- 8.15 multi 第七场 经验总结
- 书写SQL语句的一些小技巧
- vue2.0试水 ----安装
- php 浅复制与深复制
- tornado模板引擎原理
- ThreadLocal实现
- 有关排序函数cmp写法
- Android将String类型字符串转换成utf-8,gbk格式
- Redis 高可用架构最佳实践
- 删除游戏(贪心)
- 如何实现一个简单的rpc框架
- Vtiger CRM 提示 Sorry! Attempt to access restricted file.的另类出现情况