亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

求問為什么打印出來兩個析構函數的結果?

<?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么??

求問 謝謝!

正在回答

5 回答

子類ppp繼承了父類Car的析構函數

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

zdctlg 提問者

非常感謝!
2018-06-11 回復 有任何疑惑可以回復我~

$car?=?new?Car();//父類->$car

$ppp?=?new?ppp();//子類->$ppp

你創建了兩個對象,所以需要銷毀兩個,父類執行一次析構函數,子類根據繼承性也執行了一次析構函數。 所以22.

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

說白了就是parent::__construct();這句話 ?導致同時只是子類和父類,執行完的結果是1 3 1 ,執行完后https://img1.sycdn.imooc.com//5b697ce4000126d003770070.jpg? 先銷毀父類 執行一個2 ,在銷毀ppp 再執行父類的銷毀析構函數2 ? ? ??

反正我是這么理解的 好像沒毛病,

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

說白話一點就是析構函數是在類和子類中構造函數執行完畢后才被調用,在子函數中調用了父類而父類析構函數繼承執行一次

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

我明白了,是因為子類函數繼承了父類函數的方法。所以當腳本全部執行完之后,進行析構函數時,父類執行完自己的析構函數后,子類要同樣要執行一遍。所以會出現兩個2,對么?

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

舉報

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

輕松學習PHP中級課程,進行全面了解,用PHP快速開發網站程序

進入課程

求問為什么打印出來兩個析構函數的結果?

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

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號