php中对象引用和复制实例分析


Posted in PHP onAugust 14, 2019

本文实例讲述了php中对象引用和复制。分享给大家供大家参考,具体如下:

引用

$tv2 = $tv1;

或者

$tv2 = &$tv1;

以上两种方式,效果是一样的。可以理解为linux里面的硬链接。

克隆(浅复制)

$tv2 = clone $tv1;

“浅复制”:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。也就是说,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深复制

$tv4 = unserialize(serialize($tv1));

相对于“浅复制”,当然也有一个“深复制”:被复制的对象的所有的变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。也就是说,深复制把要复制的对象所引用的对象都复制了一遍。

代码示例

<?php
header("Content-type:text/html;charset=utf-8");
class TvControl{
}
class Tv{
  private $color;
  private $tvControl;
  function __construct(){
    $this->color = "black";
    $this->tvControl = new TvControl();
  }
  function setColor($color){
    $this->color = $color;
  }
  function getColor(){
    return $this->color;
  }
  function getTvControl(){
    return $this->tvControl;
  }
}
$tv1 = new Tv();
$tvControl1 = $tv1->getTvControl();
echo "原始类:";
var_dump($tv1);
echo "<hr/>";
$tv2 = $tv1;
echo "引用类:";
var_dump($tv2);
echo "<hr/>";
$tv3 = clone $tv1;
echo "克隆(浅复制):";
var_dump($tv3);
echo "<hr/>";
$tv4 = unserialize(serialize($tv1));
echo "深复制:";
var_dump($tv4);

输出结果:

原始类:
object(Tv)[1]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[2]
引用类:
object(Tv)[1]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[2]
克隆(浅复制):
object(Tv)[3]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[2]
深复制:
object(Tv)[4]
  private 'color' => string 'black' (length=5)
  private 'tvControl' =>
    object(TvControl)[5]

参考文章:https://3water.com/article/167631.htm

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
PHP5中的this,self和parent关键字详解教程
Mar 19 PHP
php 什么是PEAR?(第三篇)
Mar 19 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
Nov 21 PHP
深入解析php中的foreach问题
Jun 30 PHP
PHP实现的简单日历类
Nov 29 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
php检测文本的编码
Jul 26 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
php优化查询foreach代码实例讲解
Mar 24 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 #PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 #PHP
PHP命名空间定义与用法实例分析
Aug 14 #PHP
php中的依赖注入实例详解
Aug 14 #PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 #PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 #PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 #PHP
You might like
php入门教程 精简版
2009/12/13 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
WebQQ最新登陆协议的用法
2014/12/22 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
Python入门篇之函数
2014/10/20 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Python中遍历列表的方法总结
2019/06/27 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
慈善晚会策划方案
2014/05/14 职场文书
校庆活动策划方案
2014/06/05 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android