在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/PHP  C  C++/ PHP 中 B 子類繼承 A 父類,A 父類何時會被銷毀?

PHP 中 B 子類繼承 A 父類,A 父類何時會被銷毀?

問題說明

這里有一個 A 父類

class A
{
    public function __construct()
    {
    }

    public function __destruct()
    {
        echo "Destroy";
    }
}

子類 B,并且讓 B 繼承 A


use A;
class B extend A
{
    public function __construct()
    {
    }

    public function index()
    {
        echo "Method: index";
    }
}

$a = new A;

$a->index();

能說一下PHP執(zhí)行的流程嗎,父類 A 的析構(gòu)函數(shù)何時會被執(zhí)行?

回答
編輯回答
壞脾滊

子類B如果自己沒有定義析構(gòu)函數(shù)則會繼承父類A的析構(gòu)函數(shù),析構(gòu)函數(shù)會在當(dāng)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ù)。

2017年6月27日 06:44
編輯回答
尋仙

我覺得你可能沒有理解繼承這個概念。繼承本質(zhì)上還是新定義了一個類,只是擁有了父類非私有的方法和屬性的定義。并不是說,一個類繼承了另外一個類,它們就有先后順序,這是不對的。在什么樣的情況下會有父類和子類之分呢?就是在 staticself 的調(diào)用上會有區(qū)別。

你的這個例子,實際上是實例化了 B,實際上和 A 沒有什么關(guān)系。你可以理解為 B 中擁有了 A 中定義的方法。如果子類中沒有重新實現(xiàn)這個方法,那么子類就會認為父類中的析構(gòu)方法是自己定義的。對于其它方法或者屬性的繼承,也是一樣的。

2018年6月20日 03:35
編輯回答
涼心人

析構(gòu)函數(shù)順序與入棧順序相反, "先進后出","后進先出" 后實例化,先從棧中彈出,執(zhí)行析構(gòu)函數(shù)

$a = new A;

$a->index();
與 B 類沒啥關(guān)系吧?

這個問題與這個完全一致,可以參考這個答案PHP繼承類時的執(zhí)行順序

2017年1月5日 15:24
編輯回答
情殺

由于A 是先被實例化的,所以 A 是最后被從棧內(nèi)彈出,所有 A 的析構(gòu)函數(shù)會最后執(zhí)行

2017年2月6日 02:21