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和ACCESS写聊天室(五)
Oct 09 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
PHP isset()与empty()的使用区别详解
Aug 29 PHP
php开发环境配置记录
Jan 14 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
PHP中快速生成随机密码的几种方式
Apr 17 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
php中require和require_once的区别说明
2014/02/27 PHP
php使用百度天气接口示例
2014/04/22 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
php获取系统变量方法小结
2015/05/29 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
浅谈PHP的反射机制
2016/12/15 PHP
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
javascript控制台详解
2015/06/25 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
JS库之wow.js使用方法
2017/09/14 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
洗发露广告词
2014/03/14 职场文书
公立医院改革实施方案
2014/03/14 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
2016新年问候语大全
2015/11/11 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库