DIY 实现 ThinkPHP 核心框架 (十一)完善 App 类

查看代码,发现

\think\Container::get('app')->run()->send();

Containerget() 方法在执行时会创建自身实例。由于 App 类继承自 Container ,调用 App 时就会在内存中出现 AppContainer 两个容器实例,为了节约内存,提升代码的效率,只维持 App 的容器实例。修改代码如下

namespace think;

class App extends Container
{
    protected $init = false;

    // 进行初始化
    public function run()
    {
        $this->initialize();
        $controller = $this->make('\\app\\index\\controller\\Index');

        return Response::create($controller->index());
    }

    public function initialize()
    {
        // 避免重复初始化
        if ($this->init) {
            return;
        }
        $this->init = true;
        // 设置单例
        static::setInstance($this);
        // 将唯一容器实例保存在 app 中
        $this->app = $this;
    }
}

同时在 Container 类中添加 setInstance() 方法

 public static function setInstance($instance)
    {
        static::$instance = $instance;
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!