檢視程式碼,發現
\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 協議》,轉載必須註明作者和本文連結