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 { ...
随机推荐
- 双十一 VS 火车票(12306)
火车票开售了,又是一年,code了一年,咱们也该回顾回顾了. 还记得12306上线之初各种技术大牛给人家出方案,吐槽人家外包费用?我们来回顾回顾. 就园子里都过千篇文章来侃这事儿,请问有多少主题的文章 ...
- 图解说明——究竟什么是Windows句柄
图解说明——究竟什么是Windows句柄 参考资料:http://blog.csdn.net/newjerryj/article/details/4383701 http://www.cnblogs. ...
- Indexed 和 Stored 的区别
都是针对field的: indexed表示需不需要建立索引,以便之后对这个field进行查询: stored表示需不需要随索引同时存储这个field本身的内容,以便查询时直接从结果中获取 ...
- vs visual studio 让外网访问设置
vs2015 提供外网访问我是这么解决的 有时我们经常会用到连接外网的方式来调试自己写的莫名bug.而我们通常有两种解决方式 一.捕捉错误日志进行代码分析. 二.则是将我们的源码项目提供外网访问进行直 ...
- HDU 5980 Find Small A(寻找小A)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 【树莓派】树莓派使用4G模块上网
想了解一下树莓派通过4G网络模块通信如何实现,看到这篇文章(http://www.lxway.com/95811506.htm),准备接下来有机会实践一下,先留存学习: 一.4G Luci配置 1. ...
- WCF入门简单教程(图文) VS2010版
在这个例子中我们将使用VS 2010 创建一个WCF服务,其中会了解 [DataContract] [ServiceContract] 等特性. 内置的 WCFSVCHost ,并使用“WCF测试客 ...
- WebUpLoder 能自动预览,能多实例,包括后台demo
样式在网上找的.样子: 懒得写别的了,代码里面我写的注释挺详细的:https://github.com/zhangsai521314/WebUpLoder 写文不易,转载请注明出处:http://ww ...
- Thread.join()方法
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B.t.join() ...
- VMware Ubuntu Kaldi
1.VMware10.0 秘钥网上搜就好了 2.ubuntu12.04 (1)安了几次14.04,16.04,12.04,最后窗口和分辨率的bug 还是没有解决 (2)终端显示菱形乱码的解决:直接用英 ...