為什么析構函數(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)方法有關嗎?其原理是什么
2016-05-09
析構函數(shù),在實例化的時侯會被自動調用,你實例化了兩個對象,會調用兩次析構函數(shù),這理解是對的。
對于代碼的是幕客網(wǎng)提供的編輯器,在你輸入內容的左上角有代碼語言可以選擇,選擇了對應的語言就會根據(jù)語言提供高亮顯示效果。
2016-05-09
<code>?
class?car{
????public?$name;
????function?__construct(?$name?)
</code>
2016-05-09
<pre>
class?car{
????public?$name;
????function?__construct(?$name?)
</pre>
2016-05-09
你的代碼完全無法執(zhí)行,定義個類不是類的方法,
類的定義不應該是:
你定義的屬性不是成員屬性不是成員屬性,成員方法不是成員方法,并且PHP基本的語法,結束的分號“ ; ”也多處沒有寫上 :
public function $txt = "1"
看你的寫法應該是想定義屬性的,那么就應該是這樣寫:
你的構造函數(shù)$name這個屬性在定義成為屬性的時侯并沒有定義過,這樣的話在勢例子化對象的時間,構造函數(shù)根本就不動$name是個什么對象,報?Notice: Undefined property: car::$name 這個屬性沒有定義!
下面是修改的代碼:
看你的代碼,我想你的意圖應該是想默認初始化對象是$name
="1",然后實例化對象的時侯根據(jù)你傳的值修改默認值成為2,然后再實例化1個對象$name
值為3吧。
拼接了個<br?/>是在為了在瀏覽器顯示換行,方便看清楚效果。
建議你想將php的基本的語法先掌握再深入學習,效果應該會好些。
2016-05-09
你這代碼亂的我完全看不明白,但是你的問題我可以大概的回答你
為什么輸出了兩次 "析構被調用"??? 是因為析構函數(shù)在變量摧毀時就會運行,每次代碼運行結束就會調用,所以你這里是兩次
靜態(tài)方法有關嗎?其原理是什么?? 靜態(tài)方法關鍵詞是static,在你的代碼里我并沒有看到靜態(tài)方法的運用