4 回答

TA貢獻1852條經(jīng)驗 獲得超1個贊
析構(gòu)函數(shù)順序與入棧順序相反, "先進后出","后進先出" 后實例化,先從棧中彈出,執(zhí)行析構(gòu)函數(shù)
$a = new A;
$a->index();
與 B 類沒啥關(guān)系吧?
這個問題與這個完全一致,可以參考這個答案PHP繼承類時的執(zhí)行順序

TA貢獻1808條經(jīng)驗 獲得超4個贊
子類B如果自己沒有定義析構(gòu)函數(shù)則會繼承父類A的析構(gòu)函數(shù),析構(gòu)函數(shù)會在當PHP決定你的腳本不再與對象相關(guān)時,PHP析構(gòu)函數(shù)將被調(diào)用. 在一個函數(shù)的命名空間內(nèi),這會發(fā)生在函數(shù)return的時候. 對于全局變量,這發(fā)生于腳本結(jié)束的時候. 如果你想明確地銷毀一個對象,你可以給指向該對象的變量分配任何其它值. 通常將變量賦值為NULL或者調(diào)用unset,或者在使用exit的時候,都會執(zhí)行A類的析構(gòu)函數(shù)。

TA貢獻1856條經(jīng)驗 獲得超11個贊
我覺得你可能沒有理解繼承這個概念。繼承本質(zhì)上還是新定義了一個類,只是擁有了父類非私有的方法和屬性的定義。并不是說,一個類繼承了另外一個類,它們就有先后順序,這是不對的。在什么樣的情況下會有父類和子類之分呢?就是在 static
和 self
的調(diào)用上會有區(qū)別。
你的這個例子,實際上是實例化了 B,實際上和 A 沒有什么關(guān)系。你可以理解為 B 中擁有了 A 中定義的方法。如果子類中沒有重新實現(xiàn)這個方法,那么子類就會認為父類中的析構(gòu)方法是自己定義的。對于其它方法或者屬性的繼承,也是一樣的。
- 4 回答
- 0 關(guān)注
- 512 瀏覽
添加回答
舉報