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程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
PHP获取数组最大值下标的方法
May 12 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 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
德生H-501的评价与改造
2021/03/02 无线电
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
浅谈django 重载str 方法
2020/05/19 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
百度软件工程师职位
2013/02/14 面试题
高中军训第一天感言
2014/03/06 职场文书
市场营销方案范文
2014/03/11 职场文书
治安消防安全责任书
2014/07/23 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
党员个人总结范文
2015/02/14 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
Nginx源码编译安装过程记录
2021/11/17 Servers