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 REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
php Try Catch异常测试
Mar 01 PHP
php数字转汉字代码(算法)
Oct 08 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
php学习笔记之面向对象
Nov 08 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
PHP面向对象程序设计之类与反射API详解
Dec 02 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
php中array_fill函数的实例用法
Mar 02 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
php miniBB中文乱码问题解决方法
2008/11/25 PHP
php fckeditor 调用的函数
2009/06/21 PHP
PHP高级OOP技术演示
2009/08/27 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
python处理PHP数组文本文件实例
2014/09/18 Python
python结合API实现即时天气信息
2016/01/19 Python
python实现报表自动化详解
2017/11/16 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
交通法规咨询中心工作职责
2013/11/27 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
文明班级建设方案
2014/05/15 职场文书
文秘应届生求职信
2014/07/05 职场文书
项目建议书
2015/02/04 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技