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 相关文章推荐
解决GD中文乱码问题
Feb 14 PHP
PHP伪静态写法附代码
Jun 20 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php7 安装yar 生成docker镜像
May 09 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 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
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
python根据出生日期获得年龄的方法
2015/03/31 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
详解Python编程中time模块的使用
2015/11/20 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
项目经理的岗位职责
2013/11/23 职场文书
仓库组长岗位职责
2014/01/29 职场文书
财务主管岗位职责
2014/02/28 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
销售代理协议书
2014/09/30 职场文书
社区母亲节活动总结
2015/02/10 职场文书
社区工作者个人总结
2015/02/28 职场文书
文员岗位职责范本
2015/04/16 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang