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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
?生?D片??C字串
Dec 06 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
php实现ip白名单黑名单功能
Mar 12 PHP
php使用curl并发减少后端访问时间的方法分析
May 12 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 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 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
让您的菜单不离网站
2006/10/03 Javascript
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
Python的迭代器和生成器使用实例
2015/01/14 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
python和php哪个容易学
2020/06/19 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
幼儿教师工作感言
2014/02/14 职场文书
小班幼儿评语大全
2014/04/30 职场文书
总经理岗位职责说明书
2014/07/30 职场文书
优秀护士事迹材料
2014/12/25 职场文书
广播体操比赛主持词
2015/06/29 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript