PHP对象的浅复制与深复制的实例详解
发布人:shili8
发布时间:2022-12-04 17:16
阅读次数:19
php对象的浅复制与深复制的实例详解
最近在看原型模式时注意到这个问题~~php中对象 '=' 与‘clone'的区别
实例代码:
//聚合类
class obja {
public $num = 0;
public $objb;//包含的对象
function __construct() {
$this->objb = new objb();
}
//只有实现了下面方法聚合类 才能实现深复制
/*function __clone() {
$this->objb = clone $this->objb;
}*/
}
class objb {
public $num2 = 0;
}
//原型对象
$obja = new obja();
//复制对象(‘='复制引用)
$obja2 = $obja;
$obja2->num = 2;
//随着$obja2->num的变化 $obja->num也变化了
print_r($obja->num.'<br/>');//结果为2
print_r($obja2->num.'<br/>');//结果为2
//复制对象(‘clone'关键字克隆)
$obja3 = clone $obja;
$obja3->num = 4;
//随着$obja3->num的变化 $obja->num没有变化
print_r($obja->num.'<br/>');//结果为2
print_r($obja3->num.'<br/>');//结果为4
//但是clone的对象(是聚合类)中包含其他对象时所包含的对象(objb)复制的是引用
$obja3->objb->num2 = 7;
print_r($obja3->objb->num2.'<br/>');//结果是7
print_r($obja->objb->num2.'<br/>');//结果是7</pre>
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

