PHP對(duì)象的淺復(fù)制與深復(fù)制的實(shí)例詳解
最近在看原型模式時(shí)注意到這個(gè)問題~~PHP中對(duì)象 '=' 與‘clone'的區(qū)別
實(shí)例代碼:
//聚合類 class ObjA { public $num = 0; public $objB;//包含的對(duì)象 function __construct() { $this->objB = new ObjB(); } //只有實(shí)現(xiàn)了下面方法聚合類 才能實(shí)現(xiàn)深復(fù)制 /*function __clone() { $this->objB = clone $this->objB; }*/ } class ObjB { public $num2 = 0; } //原型對(duì)象 $objA = new ObjA(); //復(fù)制對(duì)象(‘='復(fù)制引用) $objA2 = $objA; $objA2->num = 2; //隨著$objA2->num的變化 $objA->num也變化了 print_r($objA->num.'<br/>');//結(jié)果為2 print_r($objA2->num.'<br/>');//結(jié)果為2 //復(fù)制對(duì)象(‘clone'關(guān)鍵字克隆) $objA3 = clone $objA; $objA3->num = 4; //隨著$objA3->num的變化 $objA->num沒有變化 print_r($objA->num.'<br/>');//結(jié)果為2 print_r($objA3->num.'<br/>');//結(jié)果為4 //但是clone的對(duì)象(是聚合類)中包含其他對(duì)象時(shí)所包含的對(duì)象(objB)復(fù)制的是引用 $objA3->objB->num2 = 7; print_r($objA3->objB->num2.'<br/>');//結(jié)果是7 print_r($objA->objB->num2.'<br/>');//結(jié)果是7</pre>
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。