1. 程式人生 > >PHP的類物件的賦值和clone的區別

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

1. 類物件的賦值方式

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

程式碼如下:

<?php

class mm {

    public $name = 'Peter';

}

$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 {

    public $name = 'Peter';

}

$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這種賦值方式,則是指向另一個新的物件,另一個塊新的記憶體空間。

原文 https://blog.csdn.net/qq_22520587/article/details/62455891