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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
php session安全问题分析
Jun 24 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
YII框架批量插入数据的方法
Mar 18 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python之web模板应用
2017/12/26 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
如何更优雅地写python代码
2019/07/02 Python
使用Python在Windows下获取USB PID&amp;VID的方法
2019/07/02 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
python生成大写32位uuid代码
2020/03/03 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
酒店财务总监岗位职责
2015/04/03 职场文书
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏