PHP对象的浅复制与深复制的实例详解
PHP对象的浅复制与深复制的实例详解
最近在看原型模式时注意到这个问题~~PHP中对象 '=' 与‘clone'的区别
实例代码:
//聚合类 class ObjA { public $num = 0; public $objB;//包含的对象 function __construct() { $this->objB = new ObjB(); } //只有实现了下面方法聚合类 才能实现深复制 /*function __clone() { $this->objB = clone $this->objB; }*/ } class ObjB { public $num2 = 0; } //原型对象 $objA = new ObjA(); //复制对象(‘='复制引用) $objA2 = $objA; $objA2->num = 2; //随着$objA2->num的变化 $objA->num也变化了 print_r($objA->num.'<br/>');//结果为2 print_r($objA2->num.'<br/>');//结果为2 //复制对象(‘clone'关键字克隆) $objA3 = clone $objA; $objA3->num = 4; //随着$objA3->num的变化 $objA->num没有变化 print_r($objA->num.'<br/>');//结果为2 print_r($objA3->num.'<br/>');//结果为4 //但是clone的对象(是聚合类)中包含其他对象时所包含的对象(objB)复制的是引用 $objA3->objB->num2 = 7; print_r($objA3->objB->num2.'<br/>');//结果是7 print_r($objA->objB->num2.'<br/>');//结果是7</pre>
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
PHP中的浅复制与深复制的实例详解
PHP中的浅复制与深复制的实例详解 前言: 最近温习了一下Design Pattern方面的知识,在看到Prototype Pattern这一设计模式时,注意到其中涉及到一个浅复制与深复制的问题.这里来总结一下,提醒自己以后一定要多加注意. 自PHP5起,new运算符自动返回一个引用,一个 对象变量 已经不再保存整个对象的值,只是保存一个标识符来访问真正的对象内容.当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这
-
JavaScript复制变量三种方法实例详解
这篇文章主要介绍了JavaScript复制变量三种方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 直接将一个变量赋给另一个变量时,系统并不会创造一个新的变量,而是将原变量的地址赋给了新变量名.举个栗子: 复制代码 复制代码 let obj = { a: 1, b: 2, }; let copy = obj; obj.a = 5; console.log(copy.a); // Result // a = 5; // 更改obj的值,
-
Mongo复制集同步验证的实例详解
mongo复制集同步验证的实例详解 第一步:在主节点上插入一条数据 Sql代码 rs0:PRIMARY> use imooc switched to db imooc rs0:PRIMARY> db.imooc.insert({"name":"imooc"}) WriteResult({ "nInserted" : 1 }) 第二步:在从节点查看数据,看是否同步 Sql代码 rs0:SECONDARY> use imooc sw
-
浅谈JAVA中输入输出流实例详解
java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象.在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家介绍JAVA中输入输出流实例详解. 流的层次结构 定义: java将读取数据对象成为输入流,能向其写入的对象叫输出流.结构图如下: 1.输入输出: 输入/输出(Input/Output)是指对某
-
PHP对象的浅复制与深复制的实例详解
PHP对象的浅复制与深复制的实例详解 最近在看原型模式时注意到这个问题~~PHP中对象 '=' 与'clone'的区别 实例代码: //聚合类 class ObjA { public $num = 0; public $objB;//包含的对象 function __construct() { $this->objB = new ObjB(); } //只有实现了下面方法聚合类 才能实现深复制 /*function __clone() { $this->objB = clone $this-&
-
C++对象的浅复制和深复制详解及简单实例
C++对象的浅复制和深复制详解及简单实例 浅复制:两个对象复制完成后共享某些资源(内存),其中一个对象的销毁会影响另一个对象 深复制:两个对象复制完成后不会共享任何资源,其中一个对象的销毁不会影响另一个对象 下面我们来看一段代码,以便直观的理解: #include<iostream> #include<string.h> using namespace std; class Student { int no; char *pname; public: Student(); Stud
-
Java对象深复制与浅复制实例详解
Java对象深复制与浅复制实例详解 我们在遇到一些业务场景的时候经常需要对对象进行复制,对于对象的复制一般有两种方式,深复制和浅复制 浅复制:对象的复制仅是对象本身,对象引用的其它对方并不会复制. 深复制:对象的复制包含对象引用的对象. Java所有对象的基类提供了clone方法,但是这个方法是protected native修饰,因此只暴露给之类去重写,外部是无法直接调用的. 我们现在来测试两种复制,首选是浅复制,浅复制要实现Cloneable接口. // 课程对象 class Class
-
php5对象复制、clone、浅复制与深复制实例详解
本文实例讲述了php5对象复制.clone.浅复制与深复制.分享给大家供大家参考,具体如下: 对象复制的由来 为什么对象会有"复制"这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码 PHP代码 /** * 电视机类 */ class Television { /** 屏幕高度 */ protected $_screenLength = 300; /** 屏幕宽度 */ protected $_screenHight = 200; /** 电视机外观颜色
-
举例区分Python中的浅复制与深复制
copy模块用于对象的拷贝操作.该模块非常简单,只提供了两个主要的方法: copy.copy 与 copy.deepcopy ,分别表示浅复制与深复制.什么是浅复制,什么是深复制,网上有一卡车一卡车的资料,这里不作详细介绍.复制操作只对复合对象有效.用简单的例子来分别介绍这两个方法. 浅复制只复制对象本身,没有复制该对象所引用的对象. #coding=gbk import copy l1 = [1, 2, [3, 4]] l2 = copy.copy(l1) print l1 print l2
-
Java 浅复制和深复制的实例详解
Java 浅复制和深复制的实例详解 1 浅复制和深复制区别 浅复制:浅复制只是复制本对象的原始数据类型,如int.float.String,对于数组和对象引用等是不会复制的.因此浅复制是有风险的. 深复制:不但对原始数据类型进行复制,对于对象中的数组和对象引用也做复制的行为,从而达到对对象的完全复制. 2 代码示例 package com; import java.util.ArrayList; public class Test implements Cloneable { // 私有属性 p
随机推荐
- 一些文件未注册导致mssql表文件无法找开的解决方法
- 让XP使用Win2000的搜索界面
- 新手学oracle常见疑问
- Python实例分享:快速查找出被挂马的文件
- Windows下用PyCharm和Visual Studio开始Python编程
- 火狐下input焦点无法重复获取问题的解决方法
- C#通过POP3获取邮件的代码(正文和附件)
- php格式化日期实例分析
- JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
- 从零学JS之你需要了解的几本书
- MySQL抛出Incorrect string value异常分析
- JavaScript中Array对象用法实例总结
- Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
- 解读PHP中的垃圾回收机制
- 微信小程序 图片上传实例详解
- Linux网络服务器配置入门(一)
- Linux Makefile与Shell的问题
- sqlserver 复制表 复制数据库存储过程的方法
- JS中使用Array函数shift和pop创建可忽略参数的例子
- 点击页面任何位置隐藏div的实现方法