php的clone 浅拷贝
2016-07-22 16:41
507 查看
总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了
}
}
$cls = new a();
$cls->data; // 这个data的值实际上是一个引用
//$s = 'xxx';
//$cls->data = &$s; // 如此赋值也是一个引用
$cls2 = clone $cls;
此时的$cls2的data 和 $cls的data是指向同一个值 同步变[/code]
引用在这里暂且看做指针 (引用并非指针)
data 这个属性的值是指针地址
对象 - 属性 - 【属性的值(内容为一个地址)】 - 【属性的值的值(属性的值 指向的数据)】
浅拷贝就是 复制前三个 就不再往下进行了
通过__clone改为深拷贝
打个比方吧:
比如说这里有一个煤矿
有一天要反腐了哈
浅反腐: 老板 总经理 小李 等等都干掉 ; 等风头一过 一个小张 又代表某领导继续
深反腐: 连某领导一起 连根拔除 煤矿不复存在
共同点在于: 要不要动更深层次的
参考地址:http://www.androiddev.net/php-object-clone-copy-constructor/
<?php class a { pulic $data; function __construct(){ $this->data = [code]new
DateTime(
"2014-07-05"
,
new
DateTimeZone(
"UTC"
));
}
}
$cls = new a();
$cls->data; // 这个data的值实际上是一个引用
//$s = 'xxx';
//$cls->data = &$s; // 如此赋值也是一个引用
$cls2 = clone $cls;
此时的$cls2的data 和 $cls的data是指向同一个值 同步变[/code]
引用在这里暂且看做指针 (引用并非指针)
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的一些总结
- sublime text ftp插件使用
- 关于WinNT和WinCE中使用NTP协议
- TP框架基础(一)
- PHPSESSID的cookie//session_start()
- 让PHP7达到最高性能的几个Tips
- yii redies 不同的工程缓存key的问题
- golang与PHP输出excel示例
- yii 里 获取当前登录的 ip
- 20160722关于保存应用图片到本地的相册
- Free PCB Footprints and Schematic Symbols for Millions of Parts - SnapEDA
- php更快的hugepage
- PHPCMS_V9 模型字段添加单文件上传功能
- golang与php实现计算两个经纬度之间距离的方法
- Laravel_基础_view共享数据
- PHP开发:使用PHP抓取百万知乎用户以及知识点札记
- Php Laravel中 权限处理问题
- 使用WampServer搭建php开发环境
- php 字符串截取函数 substr();
- yii2出现Unable to verify your data submission错误