PHP使用clone关键字复制对象
来源:互联网 发布:多头螺纹加工怎么编程 编辑:程序博客网 时间:2024/05/20 07:51
1.关键字clone
class testClass { public $attr1; public $attr2;}$obj = new testClass();$obj -> attr1 = 'a';$obj -> attr2 = 'b';$copy_obj = $obj;## 使用关键字clone可以完成对对象的复制 ##$copy_obj_new = clone $obj;var_dump($obj);var_dump($copy_obj);var_dump($copy_obj_new);
打印结果为:
$obj -> attr1 = 'c';var_dump($obj);var_dump($copy_obj);var_dump($copy_obj_new);
打印结果为:
实例化对象后的赋值引用赋值,使用关键字clone可以完成对对象的复制得到新的独立的对象
2. __clone() 方法
使用关键字 clone 克隆一个对象,新创建的对象(复制生成的对象)中的 __clone() 方法会被调用
class testClass { public $attr1; public $attr2; public function __clone() { $this -> attr1 = 'x'; }}$obj = new testClass();$obj -> attr1 = 'a';$obj -> attr2 = 'b';var_dump($obj);$copy_obj_new = clone $obj;var_dump($copy_obj_new);
打印结果如下:
3.浅复制与深复制
class newClass { public $newAttr = 'm';}class testClass { public $attr1; public $attr2;}$obj = new testClass();$obj -> attr1 = 'a';$obj -> attr2 = new newClass();var_dump($obj);$copy_obj_new = clone $obj;$copy_obj_new -> attr1 = 'b';$copy_obj_new -> attr2 -> newAttr = 'n';var_dump($obj);var_dump($copy_obj_new);
打印结果:
clone后属性值为非对象时,复制前后是独立的,没有相互影响。属性值为对象时,对象的属性值仍然指向同一个变量(我所理解的浅复制)
有两种方法解决上述问题,一种是使用__clone()方法,另一种是序列与反序列
public function __clone () { $this -> attr2 = clone new newClass();}
这个方法属性值为对象太多的话,就要一个个的添加,可能会死人。
上述代码:$copy_obj_new = clone $obj;替换为下面的代码$copy_obj_new = unserialize(serialize($obj));
打印结果:
各变量之间完全没有影响了
阅读全文
0 0
- PHP使用clone关键字复制对象
- php 对象复制(克隆)clone()
- PHP面向对象——clone关键字
- PHP面向对象——clone关键字
- php clone __clone()复制
- php之clone 复制对象以及__clone魔术方法
- php 对象克隆 clone
- PHP克隆对象clone
- php中的clone对象
- php 对象clone
- 对象的复制:浅复制(clone()方法的使用)+深复制
- 关于java对象复制(clone)
- 关于java对象复制(clone)
- 关于Java对象复制(Clone、深度Clone以及序列化与反序列化的使用)
- [PHP] 对象的浅复制与深复制-----“=” 与 “clone”
- PHP Clone 深复制和浅复制
- PHP中new出来的对象和 clone复制出来的对象
- 关于PHP中的对象(类的实例)的复制、clone(克隆)
- java前后端交互解决跨域问题
- 获取浏览器url的参数
- 使用systemctl命令启动和关闭mysql
- sqlite3 语句总结
- Xftp 传输中文乱码解决办法
- PHP使用clone关键字复制对象
- phalcon学习笔记--------依赖注入,容器IoC的理解
- java.lang.UnsatisfiedLinkError: Couldn't load xxx from loader dalvik.system.PathClassLoader的解决方法
- Ubuntu16.04中MySQL安装配置
- 1078 最小生成树
- $.extend() 和 $.fn.extend() 使用
- Selenium2+python自动化44-元素定位参数化(find_element)
- 数据库创建外键的两种方式
- VGScene 4.05 破解过程