您的位置:首页 > 编程语言 > PHP开发

php的clone 浅拷贝

2016-07-22 16:41 507 查看
总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了

<?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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: