PHP物件的淺複製與深複製的例項詳解

2021-09-24 21:20:52 字數 865 閱讀 7801

最近在看原型模式時注意到這個問題~~php中物件 '=' 與『clone'的區別

例項**:

//聚合類 

class obja

//只有實現了下面方法聚合類 才能實現深複製

/*function __clone() */ }

class objb

//原型物件

$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

NS物件的深複製與淺複製

1.copy 和 mutablecopy 不可變 copy 非容器或容器 淺複製 可變 copy,mutablecopy 不可變 mutablecopy 非容器或容器 深複製 容器內物件,始終為淺複製 2.initwitharray 和 initwitharray copyitems diction...

淺複製與深複製

舉個複製 的例子 function clone p,s for var prop in p return s var a var b clone a,b b.hobby 1 reading b.hobby 1 reading c.hobby 1 reading 由上面的例子可以看出,當執行淺複製時,...

深複製與淺複製

2者主要區別 是否為成員變數分配新記憶體空間 複製建構函式有2種 深複製與淺複製 當將乙個物件a複製給另乙個物件b時,系統會呼叫複製建構函式 編譯器預設的複製建構函式是淺拷貝,它將原物件的每乙個成員變數複製到新物件的成員變數中去。因而最後兩個物件的變數均指向相同的資料成員的記憶體位址。當資料成員中沒...