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运行环境配置的详解
Jun 04 PHP
深入PHP magic quotes的详解
Jun 17 PHP
php中的常用魔术方法总结
Aug 02 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
浅谈php://filter的妙用
Mar 05 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
php适配器模式简单应用示例
Oct 23 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
中国第一家无线电行
2021/03/01 无线电
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
PHP安全性漫谈
2012/06/28 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
动手学习无线电
2021/03/10 无线电
arguments对象
2006/11/20 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
python selenium 获取接口数据的实现
2020/12/07 Python
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
新学期开学寄语
2014/01/18 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
公司募捐倡议书
2014/05/14 职场文书
演讲比赛主持词
2015/06/29 职场文书
大学新生入学感想
2015/08/07 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Python序列化与反序列化相关知识总结
2021/06/08 Python