Lion2015 2015-06-10 10:34:48 5186次浏览 3条回复 1 0 0

今天读源代码的时候发现一段代码实在理解不了。

yii\vendor\yiisoft\yii2\base\Application.php__construct 调用 Component::__construct($config) 。而且 Component::__construct 这里的$this居然指向\base\Application

两个疑问。 1.Component::__construct不是static方法,为什么要这样调用 2.为什么Component::__construct里的$this指向调用的类

public function __construct($config = [])
{
    // 为什么这里的$this等于 yii\base\Application\
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}
  • 回复于 2015-06-11 21:21 举报

    你可能被表现蒙蔽了,如果换成parent:: __construct 你就明白了,但是component不是Application他爹,而是她太爷爷,所以就直接用类名了,如果没有这种继承关系 直接这样调用会报致命错误的

    觉得很赞
  • 回复于 2015-06-12 10:32 举报

    谢谢AK,非常佩服

  • 回复于 2017-03-31 13:29 举报

    我也遇到楼主一样的问题,然后看了AK的提示,追下去发下链条是这样的:
    Application -> Module -> ServiceLocator -> Component -> Object
    初看Component::__construct($config)仅仅是得到了一个Component的对象。跟当前类Application没有半毛钱关系。然而顺着追下去,发现了这样的继承关系。只能说,编程者这样写太有迷惑性。

您需要登录后才可以回复。登录 | 立即注册