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.'
');//结果为2
print_r($objA2->num.'
');//结果为2
//复制对象(‘clone'关键字克隆)
$objA3 = clone $objA;
$objA3->num = 4;
//随着$objA3->num的变化 $objA->num没有变化
print_r($objA->num.'
');//结果为2
print_r($objA3->num.'
');//结果为4
//但是clone的对象(是聚合类)中包含其他对象时所包含的对象(objB)复制的是引用
$objA3->objB->num2 = 7;
print_r($objA3->objB->num2.'
');//结果是7
print_r($objA->objB->num2.'
');//结果是7
g沙盒仇恨官方英文版(gorebox)
G沙盒仇恨英文原版是一款最近非常火热的沙盒模拟类游戏,在这里
迷你世界测试服最新版2024
迷你世界测试服2021最新版,即迷你世界的先遣服版本,用户能
闪耀暖暖最新版2024
闪耀暖暖手游这是非常好玩的换装手游,游戏内容丰富有趣,游戏环
杜拉拉升职记官方正版
杜拉拉升职记手游完美还原了经典同名电视剧中的故事剧情、以及各
银河战舰手机版
银河战舰满你所想宇宙战舰世界,茫茫宇宙资源是一切,你必须利用