我在看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中文網其他相關文章!