php的clone 浅拷贝

本文详细解析了PHP中克隆对象的概念及其工作原理,包括浅拷贝和深拷贝的区别,并通过实例展示了如何实现深拷贝。

总所周知 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值