DIY 实现 ThinkPHP 核心框架 (十一)完善 App 类
查看代码,发现
\think\Container::get('app')->run()->send();
Container
的 get()
方法在执行时会创建自身实例。由于 App 类继承自 Container
,调用 App
时就会在内存中出现 App
和 Container
两个容器实例,为了节约内存,提升代码的效率,只维持 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 协议》,转载必须注明作者和本文链接
推荐文章: