• 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/

  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/cgjcgs/p/5695699.html
Copyright © 2020-2023  润新知