在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我们经常性赋值给另一个变量,比如说: class a{ public $pp; } //创建一个对象$A; $A = new a(); $A->pp = "123"; $B = $A; $B->pp = "456"; 同时输出$A,$B的值都是“456“ 充分说明他俩共用一段空间,也就是说$B是$A的一个引用,并没有给B单独开辟一段空间 所以说这是一个浅复制; 我们来看一段深复制 $B = clone $A; 通过关键词我们可以知道是克隆了$A给$B,也就是说给B开辟了单独空间;我们来运行一下,结果如下: object(a)[1]
public 'dd' =>
string '123' (length=3) public 'pp' => null object(a)[2]
public 'dd' =>
string '123' (length=3) public 'pp' => 从结果可以看出来 A和B已经完全不是同一个对象了,这就完成了一个深复制; <?php } 这是我在理解clone时候做的一个演示例子: 类app和a是聚合关系,也就说是一种弱关系型的关联,大家猜一下这个输出结果,我这里先贴上运行结果仅供参考: object(a)[3]
public 'dd' =>
string '123' (length=3) public 'pp' => object(app)[4] public 'vv' => null object(a)[1]
public 'dd' =>
string '123' (length=3) public 'pp' => object(app)[2] public 'vv' => null 我们可以清楚的看出这是一个深复制,因为对象的id都不一样, 到这里我们算知道了真正的深复制,可是我们假如有n多个唯一成员,那么我们要一个一个在clone中进行改变吗? 这个是相对比较麻烦的,所以有一个更加简便的方法,那就是利用输入输出流的方式进行深复制; 利用php的serialize的函数我们先进行序列化,然后unserialize函数进行反序列化,读入读出就完全进行了一次复制, 这就是最简便的方式进行深复制,代码如下: <?php } 运行结果如下: object(a)[3]
public 'dd' =>
string '123' (length=3) public 'pp' => object(app)[4] public 'vv' => null object(a)[1]
public 'dd' =>
string '123' (length=3) public 'pp' => object(app)[2] public 'vv' => null
|
2022-08-17
2022-09-18
2022-08-17
2022-07-29
2022-08-15
请发表评论