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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
PHP+DBM的同学录程序(2)
Oct 09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
php生成略缩图代码
Jul 16 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
简单谈谈PHP中的trait
Feb 25 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
Laravel实现表单提交
2017/05/07 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
Python中单例模式总结
2018/02/20 Python
python读取并写入mat文件的方法
2019/07/12 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
英文版餐饮运营管理求职信
2013/11/06 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
财产公证书样本
2014/04/04 职场文书
小区推广策划方案
2014/06/06 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
开会通知短信大全
2015/04/20 职场文书
python缺失值的解决方法总结
2021/06/09 Python
python字典进行运算原理及实例分享
2021/08/02 Python