首頁  >  文章  >  後端開發  >  在php中建構函式裡面呼叫無關類別的建構子有什麼特殊意義

在php中建構函式裡面呼叫無關類別的建構子有什麼特殊意義

黄舟
黄舟原創
2017-07-02 09:56:451029瀏覽

我在看Yii2的啟動過程,其中Application的父類別建構子是這麼寫的;我想問最後一句Component::construct($config)在這裡呼叫有什麼特殊的含義嗎?

    public function construct($config = [])
    {
        Yii::$app = $this;
        $this->setInstance($this);

        $this->state = self::STATE_BEGIN;

        $this->preInit($config);

        $this->registerErrorHandler($config);

        Component::construct($config);
    }

主要是在追蹤程式碼的過程中有一個問題無法理解,
Component::construct($config)---->Object::construct($config)---> ;Yii::configure($this,$config)
在Yii::configure裡面是這樣處理的:

  public static function configure($object, $properties)
    {
        foreach ($properties as $name => $value) {
            $object->$name = $value;
        }

        return $object;
    }

這裡其實最後要呼叫對應的setter函數,其中$config一般包含components的設置,所以會呼叫到setComponents函數,這個函數時Application父類別定義的,所以這裡$this實例為什麼可以呼叫到Application的函數? $this明明是Component的實例嘛,所以理解不了,PHP基礎沒學好

application 呼叫Component的建構方法,Component繼承Object類別的建構方法哪裡呼叫Application的函數了

突然想起來了,Application extends Module extends ServiceLocator extends Component extends Object所以Application的建構子裡面的Component::construct根本就是在呼叫多層繼承的父類別的建構函數,所以可以理解Object中的$this最終還是指向Application實例。

  public function construct($config = [])
    {
        Yii::$app = $this;
        $this->setInstance($this);

        $this->state = self::STATE_BEGIN;

        $this->preInit($config);

        $this->registerErrorHandler($config);

        Component::construct($config);
    }

以上是在php中建構函式裡面呼叫無關類別的建構子有什麼特殊意義的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn