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输出控制功能在简繁体转换中的应用
Oct 09 PHP
php 动态添加记录
Mar 10 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
CI框架简单邮件发送类实例
May 18 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
PHP7下协程的实现方法详解
Dec 17 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 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/05/26 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python构造函数及解构函数介绍
2015/02/26 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
一篇.NET面试题
2014/09/29 面试题
岗位明星事迹材料
2014/05/18 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis
关于的python五子棋的算法
2022/05/02 Python