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之PHP语法学习笔记1
Dec 17 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
CI框架网页缓存简单用法分析
Dec 26 PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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 MySQL与分页效率
2008/06/04 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
php文件上传的两种实现方法
2016/04/04 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
jquery制作LED 时钟特效
2015/02/01 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
python实现2014火车票查询代码分享
2014/01/10 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python中关于for循环的碎碎念
2017/06/30 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
小学生打架检讨书
2014/01/26 职场文书
项目总经理岗位职责
2014/02/14 职场文书
课例研修方案
2014/05/31 职场文书
五一口号
2014/06/19 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js