前言:

在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*/

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