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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
memcache命令启动参数中文解释
Jan 13 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
详解php中反射的应用
Mar 15 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
php中错误处理操作实例分析
Aug 23 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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 编程安全性小结
2010/01/08 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
python 递归相关知识总结
2021/03/03 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
Hibernate持久层技术
2013/12/16 面试题
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
毕业生学校组织意见
2015/06/04 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
员工工作心得体会
2019/05/07 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Redis Cluster 集群搭建你会吗
2021/08/04 Redis