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

為了賬號安全,請及時綁定郵箱和手機立即綁定

請大神指教一下!

<?php
class?Car?{
????public?$name?=?'car';
????
????public?function?__clone()?{
????????$obj?=?new?Car();
????????$obj->name?=?$this->name;
????}
}
$a?=?new?Car();
$a->name?=?'new?car';
$b?=?clone?$a;
if?($a?==?$b)?echo?'==';???//true
if?($a?===?$b)?echo?'===';?//false

$str?=?serialize($a);?//對象序列化成字符串
echo?$str.'<br>';
$c?=?unserialize($str);?//反序列化為對象
var_dump($c);

中間的
? ? ? ?$obj = new Car();
? ? ? ?$obj->name = $this->name;
? ? 這兩段有啥用呀,去掉再運行沒有什么不同?

正在回答

2 回答

$a?=?new?Car();??#?$a是對象的引用變量
$b?=?clone?$a;???#?$b是$a對象的shallow?copy(淺拷貝)
??Php和Java一樣,clone函數(shù)默認的clone操作都是shallow?copy,并沒有包含在對象中的內(nèi)部對象。
由于這個矛盾和我們使用clone函數(shù)想要實現(xiàn)新創(chuàng)建的對象和舊對象互不影響(淺拷貝會將舊對象內(nèi)部的引用變量的值--相當于舊對象的內(nèi)部對象也拷貝到新對象中,而這個新對象也因此擁有了舊對象的內(nèi)部對象,這樣就有了一塊共同的內(nèi)存,和我們設計clone的初衷不吻合),因此Php通常會重寫__clone函數(shù),在里面在重新創(chuàng)建一個Car類的對象,然后再操作屬性。
??當然這種區(qū)別在本例的這些代碼中體現(xiàn)不出來,因此就會有你的那個問題。事實上必須加上這幾句話,否則后患無窮。


1 回復 有任何疑惑可以回復我~
#1

Scny 提問者

雖然有點不懂。還是謝謝了
2016-02-01 回復 有任何疑惑可以回復我~
#2

晝顏你不懂 回復 Scny 提問者

慢慢學,以后就會完全搞懂的
2016-02-03 回復 有任何疑惑可以回復我~

/*備注:clone函數(shù)默認的clone操作都是淺拷貝,共用一塊內(nèi)存。

設計初衷是用clone函數(shù)實現(xiàn)新創(chuàng)建的對象和舊對象互不影響。

因此,需要在__clone里面重新創(chuàng)建一個Car類的對象$c,然后再操作屬性。


深拷貝:賦值時開辟新內(nèi)存,對其中一個作出改變,不會影響另一個

淺拷貝:賦值時共用一個內(nèi)存,也就是引用傳遞。

相當于取了一個別名,對其中一個修改,會影響另一個*/


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
PHP進階篇
  • 參與學習       181905    人
  • 解答問題       2646    個

輕松學習PHP中級課程,進行全面了解,用PHP快速開發(fā)網(wǎng)站程序

進入課程

請大神指教一下!

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

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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