求問為什么打印出來兩個析構函數的結果?
<?php class?Car?{ ????function?__construct(){ ????????????print?"1"; ????} ????function?__destruct(){ ????print?"2"; }? } class?Ppp?extends?Car{ ????function?__construct()?{ ????print?"3"; ????parent::__construct(); } } $car?=?new?Car();//1???2 $ppp?=?new?ppp(); echo?"使用后,準備銷毀car對象";
運行的結果是:131使用后,準備銷毀car對象22
請問為什么是22 ?腳本里面只有一個析構函數,結果不應該只打印一個2么??
求問 謝謝!
2018-06-11
子類ppp繼承了父類Car的析構函數
2018-12-20
$car
?=?
new
?Car();//
父類->$car$ppp
?=?
new
?ppp();//
子類->$ppp你創建了兩個對象,所以需要銷毀兩個,父類執行一次析構函數,子類根據繼承性也執行了一次析構函數。 所以22.
2018-08-07
說白了就是parent::__construct();這句話 ?導致同時只是子類和父類,執行完的結果是1 3 1 ,執行完后
? 先銷毀父類 執行一個2 ,在銷毀ppp 再執行父類的銷毀析構函數2 ? ? ??
反正我是這么理解的 好像沒毛病,
2018-07-27
說白話一點就是析構函數是在類和子類中構造函數執行完畢后才被調用,在子函數中調用了父類而父類析構函數繼承執行一次
2018-06-09
我明白了,是因為子類函數繼承了父類函數的方法。所以當腳本全部執行完之后,進行析構函數時,父類執行完自己的析構函數后,子類要同樣要執行一遍。所以會出現兩個2,對么?