php的clone 浅拷贝

时间:2022-06-07 15:20:15

总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了

<?php
class a
{
  pulic $data;
  function __construct(){
    $this->data = 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是指向同一个值 同步变

引用在这里暂且看做指针 (引用并非指针)

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/