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在特殊字符前加斜杠的实现代码
Jul 17 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
php中的登陆login实例代码
Jun 20 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
php学习笔记之字符串常见操作总结
Jul 16 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
php与paypal整合方法
2010/11/28 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
php可变长参数处理函数详解
2017/02/22 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Python可迭代对象操作示例
2019/05/07 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
python中yield的用法详解
2021/01/13 Python
帕克纽约:PARKER NY
2018/12/09 全球购物
党员公开承诺书和承诺事项
2014/03/25 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
军训个人总结
2015/03/03 职场文书
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python