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 安装方法
Jan 15 PHP
一步一步学习PHP(5) 类和对象
Feb 16 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
php define的第二个参数使用方法
Nov 04 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
php 指定范围内多个随机数代码实例
Jul 18 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
数据结构之利用PHP实现二分搜索树
Oct 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
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
发现的以前不知道的函数
2006/09/19 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
JavaScript实现通讯录功能
2020/12/27 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python中生成Epoch的方法
2017/04/26 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python实现黑客字幕雨效果
2018/06/21 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
浅谈python出错时traceback的解读
2020/07/15 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
简历中自我评价分享
2013/10/09 职场文书
就业推荐表自我鉴定
2013/10/29 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
大学生英语演讲稿
2014/04/24 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书