php 对象深度复制_PHP浅拷贝、深拷贝简析

前言:

在PHP中, “=” 作为赋值符号,对于普通变量是深拷贝,对于对象来说是浅拷贝(对象的赋值是引用赋值)。

注意:对象作为参数传递时,也是引用传递,无论函数定义时参数前面是否有&符号。

简述:*深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个.(一直在模仿,也可以超越。)

*浅拷贝:赋值时,引用赋值,相当于取了一个别名。对其中一个修改,会影响另一个.(命运共同体,一荣俱荣,一损俱损)

实践:

1.普通变量的深拷贝的实现//普通变量的深拷贝的实现

$a='zhangsan';

$b=$a;

echo $a."\r\n";

echo $b."\r\n";

$b="lisi";

echo $a."\r\n";

echo $b."\r\n";

/**

*输出结果

*zhangsan

*zhangsan

*

*zhangsan

*lisi

**/

结论:普通变量的赋值就是深拷贝

2.普通变量的浅拷贝的实现//普通变量的浅拷贝的实现

$c="wangwu";

$d=&$c;

echo $c."\r\n";

echo $d."\r\n";

echo "\r\n";

$d="xiaoer";

echo $c."\r\n";

echo $d."\r\n";

/**输出结果

*wangwu

*wangwu

*

*xiaoer

*xiaoer

**/

结论:普通变量的引用赋值是深拷贝

3.对象深拷贝的实现//对象深拷贝的实现

class Person{

public $name;

}

$zhangsan=new Person();

$zhangsan->name='zhangsan';

$lisi=$zhangsan;

echo $zhangsan->name."\r\n";

echo $lisi->name."\r\n";

echo "\r\n";

$lisi->name='lisi';

echo $zhangsan->name."\r\n";

echo $lisi->name."\r\n";

/**输出结果

*zhangsan

*zhangsan

*

*lisi

*lisi

*/

结论:对象的赋值是深拷贝

4.对象浅拷贝的实现//对象浅拷贝的实现

$JackMa=new Person();

$JackMa->name='Ma Yun';

$PoneyMa=clone $JackMa;

echo $JackMa->name."\r\n";

echo $PoneyMa->name."\r\n";

echo "\r\n";

$PoneyMa->name='Ma Huateng';

echo $JackMa->name."\r\n";

echo $PoneyMa->name."\r\n";

/**输出结果

*Ma Yun

*Ma Yun

*

*Ma Yun

*Ma Huateng

*/

结论:对象的克隆是浅拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值