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 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
PHP XML数据解析代码
May 26 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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
php5中类的学习
2008/03/28 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
介绍Python的@property装饰器的用法
2015/04/28 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
python set集合使用方法解析
2019/11/05 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
python 调用Google翻译接口的方法
2020/12/09 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
EJB面试题
2015/07/28 面试题
大学四年职业生涯规划书范文
2014/01/02 职场文书
项目合作计划书
2014/01/09 职场文书
战略合作意向书范本
2014/04/01 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js