第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

clone和=&的區(qū)別

我記得之前學(xué)習(xí)變量的時(shí)候有說到=和=&的區(qū)別。

$a = 10;

$b = $a; ? ? ? ?//賦值,內(nèi)容相同,地址不同。

$c =& $a; ? ? //引用賦值,兩個(gè)變量都指向同一個(gè)數(shù)據(jù),共享同一塊內(nèi)存。

所以當(dāng)$a變化的時(shí)候,$c會(huì)跟著變化,而$b保持原來的值不變。

*******************************************************************

那為什么到了對(duì)象這邊就不一樣了呢?

$obj1?=?$obj; 引用,兩個(gè)對(duì)象變量指向同一對(duì)象,當(dāng)改變$Object1對(duì)象時(shí),$Object2也做相同的變化。

????????????(如果這個(gè)成立,那之前說到析構(gòu)函數(shù)的時(shí)候,為什么當(dāng)$obj=null的時(shí)候,$obj1沒有跟著變化?如果都變化了,那應(yīng)該觸發(fā)析構(gòu)函數(shù)了;而老師當(dāng)時(shí)說要 $obj1=&$obj,這樣$obj=null的時(shí)候才會(huì)直接觸發(fā)析構(gòu)函數(shù)。)


$obj1?=?clone?$obj; 克隆,克隆的對(duì)象$Object1與原來的對(duì)象沒有任何關(guān)系,它是將原來的對(duì)象從當(dāng)前位置從新復(fù)制了一份。

????????????(這個(gè)聽上去就和變量賦值$b = $a一模一樣誒。難道對(duì)象實(shí)例化之后賦值給$obj,這個(gè)$obj不是一個(gè)變量么?)



正在回答

3 回答

上面你對(duì)變量的引用理解沒有問題;說下對(duì)象引用這一塊,通常情況默認(rèn)情況下對(duì)象是通過引用傳遞的,所以視頻里$james1 = $james相當(dāng)于$james1 = &$james,$james->name改變也會(huì)導(dǎo)致$james1的name改變;$obj1=$obj;$obj=null的時(shí),如果按正常思維就是引用傳遞的話,$obj1也應(yīng)該是null,但結(jié)果顯然不是,就說明上面那句話不準(zhǔn)確,下面這句話你要好好理解,

“在 PHP 5,一個(gè)對(duì)象變量已經(jīng)不再保存整個(gè)對(duì)象的值。只是保存一個(gè)標(biāo)識(shí)符來訪問真正的對(duì)象內(nèi)容。 當(dāng)對(duì)象作為參數(shù)傳遞,作為結(jié)果返回,或者賦值給另外一個(gè)變量,另外一個(gè)變量跟原來的不是引用的關(guān)系,只是他們都保存著同一個(gè)標(biāo)識(shí)符的拷貝,這個(gè)標(biāo)識(shí)符指向同一個(gè)對(duì)象的真正內(nèi)容?!皡⒖糚HP官方文檔,注意那句話,另外一個(gè)變量跟原來的不是引用的關(guān)系。

這就能解釋為什么$obj1=$obj;$obj=null,按照文檔來說的話兩個(gè)對(duì)象變量并不是引用關(guān)系,簡(jiǎn)單理解的話這時(shí)候$obj1=$obj可以理解為賦值,$obj=null,但是$obj1沒有跟著變化,因?yàn)?obj保存的只是一個(gè)標(biāo)識(shí)符,改變了標(biāo)識(shí)符的內(nèi)容,但是真正的內(nèi)容并沒有改變,所以$obj1沒有變化,也可以按上面變量那里理解成單純賦值,即是內(nèi)容相同,地址不同。

http://www.php.net/manual/zh/language.oop5.references.php對(duì)象引用的官方文檔,希望能幫到你,

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Conqueror1st

如果想讓$obj1和$obj相互獨(dú)立,互不影響的話就可以用clone即可。$obj = new Class();$obj1 = clone $obj,就相當(dāng)于 $obj1 = new Class();
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Gemma_Tong 提問者

非常感謝!
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
#3

Gemma_Tong 提問者 回復(fù) Conqueror1st

我大概明白了,你待會(huì)看下我回復(fù)的下層樓~我圖解看下 你看看對(duì)不對(duì)。
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
#4

Conqueror1st 回復(fù) Gemma_Tong 提問者

好的~我也是剛自學(xué)不久,可能說的不是很清楚
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
#5

Gemma_Tong 提問者 回復(fù) Conqueror1st

發(fā)了,你看下→_→
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
查看2條回復(fù)

謝謝!?

0 回復(fù) 有任何疑惑可以回復(fù)我~

根據(jù)你@Conqueror1st 的回答,我做了這個(gè)圖,不知道是否正確。

http://img1.sycdn.imooc.com//58c63f920001bad606900301.jpg

(1)$obj1 =& $obj

兩個(gè)對(duì)象變量引用賦值,保存的是同一個(gè)地址的標(biāo)識(shí)符。

這種情況下,$obj1=null的話,也就是相當(dāng)于ID1被清空,所以這時(shí)候?qū)ο驛就沒有引用了,觸發(fā)了析構(gòu)函數(shù)。


(2)$obj2=$obj

兩個(gè)對(duì)象變量賦值,值相同都是標(biāo)識(shí)符,但是存儲(chǔ)在不同的地址,這個(gè)標(biāo)識(shí)符都指向同一個(gè)地址——對(duì)象A。

這種情況下

1)$obj2=null,相當(dāng)于ID2被清空,那么ID2指向?qū)ο驛的引用沒有了,這時(shí)候?qū)ο驛還有ID1在引用,所以沒有觸發(fā)析構(gòu)函數(shù)。

2)修改$obj2的屬性,比如$obj->name = 'James',這時(shí)候修改的是指針指向的對(duì)象A的內(nèi)容,所以一樣在引用對(duì)象A的$obj也會(huì)同步修改了name這個(gè)屬性。


(3)$obj3=clone $obj

對(duì)象復(fù)制,新增一個(gè)內(nèi)存地址存儲(chǔ)對(duì)象B,B的所有屬性和方法和A一模一樣,只是地址不同。當(dāng)然,標(biāo)識(shí)符也是不同的地址和內(nèi)容(內(nèi)容不同是因?yàn)橹赶虿煌牡胤剑?/p>

這種情況下,修改$obj3的屬性對(duì)$obj毫無影響,因?yàn)榇蠹叶际鞘馔臼鈿w!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

未知是否這樣理解。如果有錯(cuò)千萬指正啊o(╯□╰)o

2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

Conqueror1st

我認(rèn)為這樣理解是對(duì)的~感覺你的理解比我透徹??!
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
#2

Gemma_Tong 提問者 回復(fù) Conqueror1st

圖解之后會(huì)容易理解一點(diǎn)。也是你提醒了我啊沒想到這個(gè)對(duì)象變量和普通變量會(huì)有這些差別→_→
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~
#3

Conqueror1st 回復(fù) Gemma_Tong 提問者

我也查了一些資料,還是官網(wǎng)那個(gè)說的最清楚,以后有問題還是要多去官網(wǎng)看
2017-03-13 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

clone和=&的區(qū)別

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)