PHP的類物件的賦值和clone的區別

2022-03-03 14:25:16 字數 1046 閱讀 6593

1. 類物件的賦值方式

php的類的賦值方式,有3種情況,一種是$a = new class()操作,建立類;一種是普通的物件賦值$a = $b; 一種取位址的賦值方式$a = &$b。那麼,這三種賦值,指向的記憶體是否是同一塊呢?好吧,我們一起來做乙個實驗。

**如下:

<?php

class

mm $a = new

mm();

echo

$a->name,"\n";//

輸出為peter

$b = $a

; $c = &$a

;$b->name = "anne";

echo

$a->name,"\n",$b->name,"\n",$c->name,"\n";//

都輸出為anne

?>

從輸出結果,我們可以看出,他們三個$a/$b/$c都是指向同乙個物件的,也就是同一塊記憶體。

2. 類物件的clone的賦值方式

好吧,現在,我們一起來試試clone的賦值方式,看看他們是否指向同一塊記憶體。

**如下:

<?php

class

mm $a = new

mm();

$b = $a

; $c = &$a

;$d = clone

$a; 

$b->name = "anne";

echo

$a->name,"\n",$b->name,"\n",$c->name,"\n",$d->name;//

輸出為:anne anne anne peter

?>

從輸出結果,可以看出,$d = clone $a;這個物件指向了單獨的一塊記憶體空間,所以,一直保留著原來的值peter。

3. 小結:

在php5的類物件操作中,$a=$b和$a=&$b這種賦值方式,指向的是同乙個物件,同一塊記憶體空間;$a=clone $b這種賦值方式,則是指向另乙個新的物件,另乙個塊新的記憶體空間。

原文

PHP的類物件的賦值和clone的區別

1.類物件的賦值方式 php的類的賦值方式,有3種情況,一種是 a new class 操作,建立類 一種是普通的物件賦值 a b 一種取位址的賦值方式 a b。那麼,這三種賦值,指向的記憶體是否是同一塊呢?好吧,我們一起來做乙個實驗。如下 class mm public name peter a ...

C 類物件的複製和賦值

例1.類物件複製,拷貝建構函式 includeusing namespace std class student void setname string str void getname private string m strname void student setname string str...

PHP 類和物件(類的屬性)

在類中定義的變數稱之為屬性,通常屬性根資料庫中的字段有一定的關聯,因此 也可以稱其為 字段 常見的屬性宣告是由關鍵字public,protected,var或private開頭,後面跟乙個普通的變數聲 來組成。還有一些成員屬性包括,靜態static,常量const。public 預設值,表示全域性的...