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安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
ecshop 2.72如何修改后台访问地址
Mar 03 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
php 自定义错误日志实例详解
Nov 12 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
Jun 29 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 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面向对象法则
2012/02/23 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
python调用摄像头拍摄数据集
2019/06/01 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Pytorch to(device)用法
2020/01/08 Python
python实现PCA降维的示例详解
2020/02/24 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
学生会部长竞聘书
2014/03/31 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
国王的演讲观后感
2015/06/03 职场文书
黑白记忆观后感
2015/06/18 职场文书
如何拟写通知正文?
2019/04/02 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
详解MySQL的内连接和外连接
2023/05/08 MySQL