php 对象和数组的赋值过程

$a = ['a'=>array('b'=>1)];                                                                                              
var_dump($a);                                                                                                           
/$b = $a;                                                                                                                                                                                                     
$b['a'] = 2;                                                                                                            
var_dump($b);                                                                                                           

var_dump($a);

两次输出的$a 一致 说明默认的赋值过程是深度拷贝调用



                                                                                                                        
class A {                                                                                                               
    public $a = array('a'=>'2');                                                                                        
};                                                                                                                      
$a = new A();                                                                                                           
var_dump($a);                                                                                                           
$b = $a;                                                                                                                
$b->a = 3;                                                                                                                                                                                                                                   
                                                                                                                        
var_dump($a);                                                                                                           
                                                                                                                        
var_dump($b); 

输出:

object(A)#1 (1) {
  ["a"]=>
  array(1) {
    ["a"]=>
    string(1) "2"
  }
}
object(A)#1 (1) {
  ["a"]=>
  int(3)
}
object(A)#1 (1) {
  ["a"]=>
  int(3)
}

可见对象默认的赋值并非深度拷贝 {
  ["a"]=>
  array(1) {
    ["a"]=>
    string(1) "2"
  }
}
object(A)#1 (1) {
  ["a"]=>
  int(3)
}
object(A)#1 (1) {
  ["a"]=>
  int(3)
}。。浅拷贝



3 使用clone拷贝对象(深度拷贝 说明默认的对象__clone魔术方法实现)

class A {                                                                                                                                              
    public $a = array('a'=>'2');                                                                                                                       
};                                                                                                                                                     
$a = new A();                                                                                                                                          
var_dump($a);                                                                                                                                          
$b = clone $a;                                                                                                                                                                                                                               
$b->a = 3;                                                                                                              
                                                                                                                                                       
var_dump($a);                                                                                                                                          
                                                                                                                                                       
var_dump($b);                                                                                                                                          
                                                                                                                                                       
输出:

object(A)#1 (1) {
  ["a"]=>
  array(1) {
    ["a"]=>
    string(1) "2"
  }
}
object(A)#1 (1) {
  ["a"]=>
  array(1) {
    ["a"]=>
    string(1) "2"
  }
}
object(A)#2 (1) {
  ["a"]=>
  int(3)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值