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

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

為什么析構函數(shù)被執(zhí)行了2遍?

calss car(){

public function $txt = "1"

function __construct($name){ ?

echo "構造被調用";

$this->$name = $name

}?

}

$a = new car(2);

$a->name;

這時候?應該是輸出:

“構造被調用”

?1

之后再加上下面的析構函數(shù)

function __destruct(){ ??

echo "析構被調用".$txt

$b = new car(3);

$b->name;

這時候應該會輸出

“構造被調用”

?3?

“析構被調用 2”?

“析構被調用 3”

怎么說呢,感覺老師講的那個Nbaplaror是這個順序,我也不知道該怎么說了,我不明白的地方是為什么最后為什么輸出了兩次 "析構被調用" 并且把實例化$a時傳的值也調出來了??

為什么在實例化$b的時候 $a時傳的值還在

這和靜態(tài)方法有關嗎?其原理是什么

正在回答

5 回答

析構函數(shù),在實例化的時侯會被自動調用,你實例化了兩個對象,會調用兩次析構函數(shù),這理解是對的。

對于代碼的是幕客網(wǎng)提供的編輯器,在你輸入內容的左上角有代碼語言可以選擇,選擇了對應的語言就會根據(jù)語言提供高亮顯示效果。

http://img1.sycdn.imooc.com//573085ac0001708802860297.jpg

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

SAGEGSDAGESE 提問者

非常感謝你的耐心解答
2016-05-10 回復 有任何疑惑可以回復我~
#2

吳智彬 回復 SAGEGSDAGESE 提問者

~~呵呵
2016-05-11 回復 有任何疑惑可以回復我~
#3

yuyang123

反對!這里答主所說的應該是構造函數(shù)。 析構函數(shù)是在對象摧毀時就會運行(不是變量被摧毀,是對象)。 比如$jordan = new NbaPlayer();以后 你unset($jordan)或者$jordan = 1,都會調用其析構函數(shù)。
2016-06-08 回復 有任何疑惑可以回復我~

<code>?

class?car{

????public?$name;

????function?__construct(?$name?)

</code>

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

<pre>

class?car{

????public?$name;

????function?__construct(?$name?)

</pre>

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

你的代碼完全無法執(zhí)行,定義個類不是類的方法,

calss?car(){
}

類的定義不應該是:

class?car{
????
}

它不是個函數(shù)不應該有()小括號。

你定義的屬性不是成員屬性不是成員屬性,成員方法不是成員方法,并且PHP基本的語法,結束的分號“ ; ”也多處沒有寫上 :

public function $txt = "1"

看你的寫法應該是想定義屬性的,那么就應該是這樣寫:

public?$txt?=?"1";

你的構造函數(shù)$name這個屬性在定義成為屬性的時侯并沒有定義過,這樣的話在勢例子化對象的時間,構造函數(shù)根本就不動$name是個什么對象,報?Notice: Undefined property: car::$name 這個屬性沒有定義!

function?__construct($name){??
echo?"構造被調用";
$this->$name?=?$name???//這里的分號你又沒有寫,并且$name這個屬性并沒有定義。
}
//在類的內部調用成員屬性,要輸出要在前面加個?echo??輸出出來

下面是修改的代碼:

class?car{
????public?$txt?=?"1";
????public?$name;
????function?__construct($name)
????{?
????????echo?"構造被調用";
????????echo?$this->$name?=?$name;
????}?
}

看你的代碼,我想你的意圖應該是想默認初始化對象是$name
="1",然后實例化對象的時侯根據(jù)你傳的值修改默認值成為2,然后再實例化1個對象$name
值為3吧。

class?car{
????public?$name;
????function?__construct(?$name?)
????{
????????echo?"構造被調用<br?/>";
????????echo?$this->name?=?$name?.?"<br?/>";
????}
}
$a?=?new?car(2);
echo?$a->name;
$b?=?new?car(3);
echo?$b->name;

拼接了個<br?/>是在為了在瀏覽器顯示換行,方便看清楚效果。
建議你想將php的基本的語法先掌握再深入學習,效果應該會好些。

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

SAGEGSDAGESE 提問者

還是被你看出來了..我就是想這樣寫的,當時腦袋太亂寫錯了太多細節(jié),不過你說的我能理解。我是想再加上析構函數(shù) function __destruct(){echo "析構被調用".$name;} 如果我理解沒錯的話,應該會調用兩次析構函數(shù),包括構造被調用2和構造被調用3 不明白為什么執(zhí)行兩次析構函數(shù),是因為有兩個對象的原因? 綜合來說可能還是不太了解析構函數(shù)會在什么時候調用。 因為老師那個代碼太長懶得搬來,結果好像被自己弄得更復雜了... 另外你的那個代碼是怎么寫的啊,很整潔并且有背景色和行數(shù),怎么寫
2016-05-09 回復 有任何疑惑可以回復我~
#2

SAGEGSDAGESE 提問者 回復 SAGEGSDAGESE 提問者

“包括析構函數(shù)被調用2和析構函數(shù)被調用3” 上面把析構寫成構造了
2016-05-09 回復 有任何疑惑可以回復我~

你這代碼亂的我完全看不明白,但是你的問題我可以大概的回答你

  1. 為什么輸出了兩次 "析構被調用"??? 是因為析構函數(shù)在變量摧毀時就會運行,每次代碼運行結束就會調用,所以你這里是兩次

  2. 靜態(tài)方法有關嗎?其原理是什么?? 靜態(tài)方法關鍵詞是static,在你的代碼里我并沒有看到靜態(tài)方法的運用

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

SAGEGSDAGESE 提問者

析構函數(shù)在每次代碼運行結束會調用,怎么樣才算結束呢?一個對象的程序結束后?還是說等php所有代碼全部執(zhí)行后才調用
2016-05-09 回復 有任何疑惑可以回復我~
#2

yuyang123 回復 SAGEGSDAGESE 提問者

倆種情況,1、手動清除,比如你unset($jordan),刪除這個變量,或者改變$jordan的指針,重新復制,比如給它一個null或者其他的值,$jodan = 1;這樣也可以,其析構函數(shù)就會被調用。 2、PHP引擎自動清除,比如執(zhí)行完這些代碼,系統(tǒng)對其進行內存垃圾回收,就會把這些變量清除掉,所以也會調用析構函數(shù)。
2016-06-08 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么析構函數(shù)被執(zhí)行了2遍?

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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