App类为什么要继承Container
来源:4-8 【Container容器类剖析】获取容器里面的实例分析
木祁3
2019-11-03
Container中的属性都是protected
然后App继承Container容器类。
App为什么要继承Container容器类?
2回答
-
singwa
2019-11-04
亲爱的同学您好
关键代码在这里, 这样做的话 会把 initialize初始化方法中 设置的一些 对象属性 再次绑定到APP类实例容器中。
00 -
木祁3
提问者
2019-11-03
Container类中的protected static $instance;是静态的。
App类继承Container类。那么App类和Container类都是维护同一个static $instance变量。
在代码运行的时候,最开始Container中$instance存储的是think\Container Object。
App类中的 initialize方法中,调用了static::setInstance($this);这个时候$instance中存储的对象变为think\App Object。
这个时候相当于Container::getInstance()和App::getInstance()得到的都是$instance中的值think\App Object。
App类中的 initialize方法中,$this->env->load($this->rootPath . '.env');相当于把env类的实例注册到了think\App Object对象的$instances(注册树)中。
Container::getInstance()->all()和App::getInstance()->all都能够查看到注册进来的env实例。
App继承Container类,在应用中获取注册树中的实例是通过Container::getinstance来获取的,但是注册env实例到注册树又是通过App类的 initialize来注册。
为什么App类继承Container。一会操作App类,一会儿操作Container类。没有搞懂为什么这样设计,有什么好处?
012021-07-15
相似问题