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的无限分类实现想法~
Jan 02 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
php date()日期时间函数详解
May 16 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
Yii入门教程之Yii安装及hello world
Nov 25 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
Mar 11 PHP
php车辆违章查询数据示例
Oct 14 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
asp函数split()对应php函数explode()
Feb 27 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中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
详解Python中的动态属性和特性
2018/04/07 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
python和php学习哪个更有发展
2020/06/17 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
电大自我鉴定
2013/10/27 职场文书
销售人员自我评价
2014/02/01 职场文书
运动会入场词
2015/07/18 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书