本文目錄一覽:
- 1、PHP對象的淺複製與深複製的實例詳解
- 2、怎麼在php中使用clone複製對象
- 3、php對象賦值問題
- 4、php clone後是什麼對象
- 5、php問題 克隆對象和引用對象的區別是什麼
- 6、PHP對象克隆clone用法示例
PHP對象的淺複製與深複製的實例詳解
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
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
怎麼在php中使用clone複製對象
(1)調用Cbitmap類的LoadBitmap函數調入位圖資源。
(2)調用CDC::CreatCompatibleDC函數創建一個內存設備環境,以便位圖在內存中保留下來,並於指定設備環境兼容。
php對象賦值問題
你這個是直接賦值了,然後又操作了$instance,沒有操作$assigned,賦值的意思是,你在內存中開闢了一個空間,內容和$instance一樣,所以你操作$instance,不會對$assigned有影響。
正確的應該是這樣的:
第一行:$assigned = $instance;
這個就是把$assigned 和 $instance 指向了同一個內存地址,改變了$instance,$assigned當然也改變了。
php clone後是什麼對象
在php5中,對象的傳遞方式默認為引用傳遞,如果我們想要在內存中生成兩個一樣的對象或者創建一個對象的副本,這時可以使用“克隆”。
通過 clone 克隆一個對象
對象的複製是通過關鍵字 clone 來實現的。用 clone 克隆出來的對象與原對象沒有任何關係,它是把原來的對象從當前的位置重新複製了一份,也就是相當於在內存中新開闢了一塊空間。通過關鍵字 clone 可以克隆一個對象,語法格式如下:
$克隆對象名稱=clone $原對象名稱;
__clone()方法
對象的__clone()方法不能夠直接被調用,只有當通過關鍵字 clone 克隆一個對象時才可以使用該對象調用__clone()方法。當創建對象的一個副本時,php5將會檢查__clone()方法是否存在。如果不存在,那 么它就會調用默認的__clone()方法,複製對象的所有屬性。如果__clone方法已經定義過,那麼__clone()方法就會負責設置新對象的屬 性。所以在__clone()方法中,只需要覆蓋那些需要更改的屬性就可以了。例子如下:
php問題 克隆對象和引用對象的區別是什麼
複製文件、建立快捷方式的區別,克隆就是複製,引用就是快捷方式,引用的對象實際上同一個東西,修改任何一個變量,另外一個也會跟着變化。
PHP對象克隆clone用法示例
本文實例講述了PHP對象克隆clone用法。分享給大家供大家參考,具體如下:
淺克隆:只是克隆對象中的非對象非資源數據,即對象中屬性存儲的是對象類型,則會出現克隆不完全
?php
class
B{
public
$val
=
10;
}
class
A{
public
$val
=
20;
public
$b;
public
function
__construct(){
$this-b
=
new
B();
}
}
$obj_a
=
new
A();
$obj_b
=
clone
$obj_a;
$obj_a-val
=
30;
$obj_a-b-val
=
40;
var_dump($obj_a);
echo
‘br’;
var_dump($obj_b);
運行結果如下:
object(A)[1]
public
‘val’
=
int
30
public
‘b’
=
object(B)[2]
public
‘val’
=
int
40
object(A)[3]
public
‘val’
=
int
20
public
‘b’
=
object(B)[2]
public
‘val’
=
int
40
深克隆:一個對象的所有屬性數據都徹底的複製,需要使用魔術方法__clone(),並在裡面實現深度克隆
?php
class
B{
public
$val
=
10;
}
class
A{
public
$val
=
20;
public
$b;
public
function
__construct(){
$this-b
=
new
B();
}
public
function
__clone(){
$this-b
=
clone
$this-b;
}
}
$obj_a
=
new
A();
$obj_b
=
clone
$obj_a;
$obj_a-val
=
30;
$obj_a-b-val
=
40;
var_dump($obj_a);
echo
‘br’;
var_dump($obj_b);
運行結果如下:
object(A)[1]
public
‘val’
=
int
30
public
‘b’
=
object(B)[2]
public
‘val’
=
int
40
object(A)[3]
public
‘val’
=
int
20
public
‘b’
=
object(B)[4]
public
‘val’
=
int
10
更多關於PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《PHP網絡編程技巧總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
原創文章,作者:XXGGL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129580.html