php的clone 浅拷贝
总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了
<?php
class a
{
pulic $data;
function __construct(){
$this->data =newDateTime("2014-07-05",newDateTimeZone("UTC"));
}
}
$cls = new a();
$cls->data; // 这个data的值实际上是一个引用
//$s = 'xxx';
//$cls->data = &$s; // 如此赋值也是一个引用
$cls2 = clone $cls;
此时的$cls2的data 和 $cls的data是指向同一个值 同步变
引用在这里暂且看做指针 (引用并非指针)
data 这个属性的值是指针地址
对象 - 属性 - 【属性的值(内容为一个地址)】 - 【属性的值的值(属性的值 指向的数据)】
浅拷贝就是 复制前三个 就不再往下进行了
class a{
$data ;
function __clone(){
$this->data = clone $this->data;
}
}
通过__clone改为深拷贝
打个比方吧:
比如说这里有一个煤矿
class 老板 {
public $总经理;
public $员工1;
public $小李;
public function __construct(){
$this->小李 = & 某领导;
}
public function 挖煤卖钱(){
}
private function 分赃(){
}
}
有一天要反腐了哈
浅反腐: 老板 总经理 小李 等等都干掉 ; 等风头一过 一个小张 又代表某领导继续
深反腐: 连某领导一起 连根拔除 煤矿不复存在
共同点在于: 要不要动更深层次的
参考地址:http://www.androiddev.net/php-object-clone-copy-constructor/
php的clone 浅拷贝的更多相关文章
- Java clone() 浅拷贝 深拷贝
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- java的clone()、浅拷贝与深拷贝
clone()方法是Object的native方法.protected native Object clone() throws CloneNotSupportedException; 声明为pro ...
- Java clone() 方法克隆对象——深拷贝与浅拷贝
基本数据类型引用数据类型特点 1.基本数据类型的特点:直接存储在栈(stack)中的数据 2.引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指 ...
- jquery深拷贝和浅拷贝
var obj1 = { a: 1 };var obj2 = { b: {bbb: 2} };function Clone(){//浅拷贝 拷贝到obj1值会被改变 在一个栈中 $.extend(ob ...
- 数组的Clone方法
public void Test() { ,,}; var arr2 = arr1; var arr3 = (int[])arr1.Clone(); //浅拷贝 arr1[] = ; //arr2[0 ...
- .net平台下深拷贝和浅拷贝
在.net类库中,对象克隆广泛存在于各种类型的实现中,凡是实现了ICloneable接口的类型都具备克隆其对象实例的能力.所以本文讲述的深拷贝和浅拷贝也是在实现ICloneable接口的基础上进行的. ...
- 深度理解DOM拷贝clone()
克隆节点是DOM的常见操作,jQuery提供一个clone方法,专门用于处理dom的克隆: .clone()方法深度 复制所有匹配的元素集合,包括所有匹配元素.匹配元素的下级元素.文字节点. clon ...
- 浅谈.net平台下深拷贝和浅拷贝
在.net类库中,对象克隆广泛存在于各种类型的实现中,凡是实现了ICloneable接口的类型都具备克隆其对象实例的能力.所以本文讲述的深拷贝和浅拷贝也是在实现ICloneable接口的基础上进行的 ...
- C#原型模式(深拷贝、浅拷贝)
原型模式就是用于创建重复的对象,当想要创建一个新的对象但是开销比较大或者想将对象的当前状态保存下来的时候,我们就可以使用原型模式. 创建原型 public abstract class Base { ...
随机推荐
- [转]UE4 Blueprint编译过程
Blueprint 编译概述 一.术语 Blueprint,像C++语言一下的,在游戏中使用前需要编译.当你在BP编辑器中,点击编译按钮时候,BP资源开始把属性和图例过程转换为一个类对象处理. 1 ...
- Jenkins 在windows下的安装与配置
1. 安装Jenkins war包安装:启动Jenkins命令,打开cmd至Jenkins安装目录下,运行命令 java -jar jenkins.war 如果改变默认端口,则指定端口例如端口号108 ...
- .Net环境下的缓存技术介绍
.Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 1.1 ...
- point
7.10 []getch->_getch []错误:fatal error C1189: #error : EasyX is only for C++ :.c改为.cpp
- Deep Learning 22:总结一些deep learning的基本知识
1.交叉熵代价函数 2.正则化方法:L1和L2 regularization.数据集扩增.dropout 3. 数据预处理 4.机器学习算法中如何选取超参数:学习速率.正则项系数.minibatch ...
- [转载] Jenkins入门总结
转载自http://www.cnblogs.com/itech/archive/2011/11/23/2260009.html 在网上貌似没有找到Jenkins的中文的太多的文档,有的都是关于Huds ...
- 卸载mysql
如果你的电脑里装过MySQL,想再重新安装MySQL的时候可能就会因为前一版本卸载不彻底而出现错误.最常见的就是安装好后设置参数的最后一步验证时,会在Execute configurattion步骤中 ...
- 给libpcap增加一个新的捕包方法
libpcap是一个网络数据包捕获函数库,功能非常强大,提供了系统独立的用户级别网络数据包捕获接口,Libpcap可以在绝大多数类unix 平台下工作.大多数网络监控软件都以它为基础,著名的tcpdu ...
- 51nod 1181 质数中的质数(质数筛法)
题目链接:51nod 1181 质数中的质数(质数筛法) #include<cstdio> #include<cmath> #include<cstring> #i ...
- 51nod 1622 集合对[算法马拉松19 C]
题目链接:https://www.51nod.com/contest/problem.html#!problemId=1622 第一次参加算法马拉松,我就是去看大神们疯狂秒题,然后感受绝望的orz.. ...