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调用Oracle存储过程
Oct 09 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
php学习之简单计算器实现代码
Jun 09 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
PHP引用的调用方法分析
Apr 25 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 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出错界面
2006/10/09 PHP
php 进度条实现代码
2009/03/10 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
jquery处理json对象
2014/11/03 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
全面理解闭包机制
2016/07/11 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Python 私有函数的实例详解
2017/09/11 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
《池塘边的叫声》教学反思
2014/04/12 职场文书
成绩单家长评语大全
2014/04/16 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
顶岗实习协议书
2015/01/29 职场文书
二审代理词范文
2015/05/25 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL