PHP的对象复制
来源:互联网 发布:剑网三大师捏脸数据 编辑:程序博客网 时间:2024/05/16 09:40
这里要说的PHP对象复制包括两个部分:一是对象赋值给一个变量,二是使用clone复制对象。
一、对象赋值
先看下面的代码:
class SimpleClass{public $var = 'a default value';public function displayVar() {echo $this->var;}}$instance = new SimpleClass();$reference = &$instance;$assigned = $instance;$instance->var = '$assigned will have this value';$instance = null;var_dump($instance);var_dump($assigned);var_dump($reference);输出:
nullobject(SimpleClass)[1] public 'var' => string '$assigned will have this value' (length=30)nullPHP的引用是别名,就是两个不同的变量名指向相同的内容。所以在上面的代码中,当$instance指向的内容设置为null以后,$reference也就变成null了。再看下面的代码:
class SimpleClass{public $var = 'a default value';public function displayVar() {echo $this->var;}}$instance = new SimpleClass();$reference = &$instance;$assigned = $instance;$instance->var = '$assigned will have this value';unset($instance);var_dump($instance);var_dump($assigned);var_dump($reference);输出:
nullobject(SimpleClass)[1] public 'var' => string '$assigned will have this value' (length=30)object(SimpleClass)[1] public 'var' => string '$assigned will have this value' (length=30)使用unset以后,由于$reference只是$instance的别名,所以即使$instance被释放了(unset只是解除变量名和变量之间的关联),但是它指向的内容没有改变,对$reference没有影响。
另外,在PHP5中,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。所以上面的$instance和$assigned指向同一个标识符的不同拷贝,而$instnce和$reference指向的是同一个标识符。即其实上面$instance设置为null,是把标识符设为null,对象还是在的。
二、clone复制对象
使用赋值获得的对象,在修改了$instance里的属性值以后,$assigned的属性值也发生了变化。但是有时候,我们需要独立的两个对象,不会相互影响,这时可以通过clone关键字来实现。这部分请参考手册实例。
说明:
1、PHP5对象复制是采用引用的方式;
2、如果不采用引用方式,则需要在复制对象时加关键字 clone;
3、如果在复制的过程中,同时要变更某些属性,则增加函数_clone();
参考文章:
1、php对象copy
2、对象和引用
3、PHP引用以及误区
4、对象复制
5、写时复制
6、PHP新对象
- PHP的对象复制
- php中系统对象的深浅复制
- PHP对象的浅复制与深复制
- PHP对象的深复制与浅复制
- 78. PHP 对象复制
- php 对象复制
- php之对象复制
- PHP新对象(1)--对象的复制
- php 对象复制(克隆)clone()
- php对象复制相关解析
- PHP的对象和引用(写时复制)
- php对象复制原理(浅复制和深复制)
- [PHP] 对象的浅复制与深复制-----“=” 与 “clone”
- PHP中new出来的对象和 clone复制出来的对象
- 对象的复制
- js对象的复制
- C++对象的复制
- java对象的复制
- 黑马程序员_学习笔记_Java基础_集合(三)
- 【Android】android的基本UI操作(1)
- C++之类与对象(3)
- 攻读计算机研究生的看法
- jQuery中$符号的使用及解决命名冲突
- PHP的对象复制
- static_cast、dynamic_cast、reinterpret_cast、和 const_cast
- Android 开发中的多线程编程技术
- 关于C++虚函数
- java平台统一异常框架的设计与实现 .
- Android开发者指南-Manifest.xml-<supports-screens>[原创译文]
- C++类与对象的进一步讨论(1)
- NP完全问题
- KMP算法