PHP对象的浅复制与深复制的实例详解


Posted in PHP onOctober 26, 2017

PHP对象的浅复制与深复制的实例详解

最近在看原型模式时注意到这个问题~~PHP中对象 '=' 与‘clone'的区别

实例代码:

//聚合类 
class ObjA { 
  public $num = 0; 
  public $objB;//包含的对象 
  function __construct() { 
    $this->objB = new ObjB(); 
  } 
  //只有实现了下面方法聚合类 才能实现深复制 
  /*function __clone() { 
    $this->objB = clone $this->objB; 
  }*/ 
} 
 
class ObjB { 
  public $num2 = 0; 
} 
 
//原型对象 
$objA = new ObjA(); 
 
//复制对象(‘='复制引用) 
$objA2 = $objA; 
$objA2->num = 2; 
//随着$objA2->num的变化 $objA->num也变化了 
print_r($objA->num.'<br/>');//结果为2 
print_r($objA2->num.'<br/>');//结果为2 
 
//复制对象(‘clone'关键字克隆) 
$objA3 = clone $objA; 
$objA3->num = 4; 
//随着$objA3->num的变化 $objA->num没有变化 
print_r($objA->num.'<br/>');//结果为2 
print_r($objA3->num.'<br/>');//结果为4 
//但是clone的对象(是聚合类)中包含其他对象时所包含的对象(objB)复制的是引用 
$objA3->objB->num2 = 7; 
print_r($objA3->objB->num2.'<br/>');//结果是7 
print_r($objA->objB->num2.'<br/>');//结果是7</pre>

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
php截取后台登陆密码的代码
May 05 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
PHP 实现链式操作
Mar 09 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 #PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 #PHP
thinkPHP5分页功能实现方法分析
Oct 25 #PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 #PHP
php调用云片网接口发送短信的实现方法
Oct 25 #PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 #PHP
Laravel学习教程之request validation的编写
Oct 25 #PHP
You might like
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
提高PHP编程效率的方法
2013/11/07 PHP
为你总结一些php系统类函数
2015/10/21 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
详解使用React制作一个模态框
2019/03/14 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
解析Python的缩进规则的使用
2019/01/16 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
python eventlet绿化和patch原理
2020/11/21 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
Delphi CS笔试题
2014/01/04 面试题
求职者应聘的自我评价
2013/10/16 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
农业项目投资意向书
2015/05/09 职场文书
公司回复函格式
2015/07/14 职场文书
服务器间如何实现文件共享
2022/05/20 Servers