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.对象深拷贝的实现
//对象深拷贝的实现classPerson{public$name;}$zhangsan=newPerson();$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=newPerson();$JackMa->name='MaYun';$PoneyMa=clone$JackMa;echo$JackMa->name."\r\n";echo$PoneyMa->name."\r\n";echo"\r\n";$PoneyMa->name='MaHuateng';echo$JackMa->name."\r\n";echo$PoneyMa->name."\r\n";/**输出结果*MaYun*MaYun**MaYun*MaHuateng*/
结论:对象的克隆是浅拷贝
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。