php的clone 浅拷贝

总所周知 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 $员工1public $小李public function __construct(){
    $this->小李 = & 某领导;    
 }
 public function 挖煤卖钱(){
    
 }
 private function 分赃(){
 }     
}

有一天要反腐了哈

浅反腐: 老板 总经理 小李 等等都干掉 ; 等风头一过 一个小张 又代表某领导继续

深反腐: 连某领导一起 连根拔除  煤矿不复存在

共同点在于: 要不要动更深层次的

参考地址:http://www.androiddev.net/php-object-clone-copy-constructor/

原文地址:https://www.cnblogs.com/cgjcgs/p/5695699.html