~~~
require __DIR__ . '/../vendor/autoload.php'; //加載composer文件
// 執行HTTP應用并響應
$http = (new App())->http; //實例化think\app 核心類,執行里面的http::class的構造方法
為什么會執行http的構造方法呢,我們在think\App 并沒有發現有http這個方法,實際上調用了think\App的父類 __get魔術方法
~~~
/**
* 獲取容器中的對象實例
* @access public
* @param string $abstract 類名或者標識
* @return object
*/
public function get($abstract)
{
if ($this->has($abstract)) {
return $this->make($abstract);
}
throw new ClassNotFoundException('class not exists: ' . $abstract, $abstract);
}
~~~
會在bind 類里面匹配當前傳遞的這個http名稱然后找到這個http::class的實例
可以看到這個http構造方法僅做了一步:
加載項目根目錄route下的app.php
里面可以看到app是通過助手函數基類helper.php 進行加載的.但是這一步是還沒有執行的,因為helper助手函數基類還沒有被include進去,include操作在~~~
$response = $http->run();
http類的runWithRequest 里面執行了http類的初始化initialize
1 可以看到里面主要是用了ini模式加載的我們常用的.env文件
2 debug模式輸出緩存區到頁面方便調試
接下來的幾個加載比較重要
3 加載了common.php我們的自定義函數庫(類似于下面提到的helper)以及helper.php
4 循環加載了app路徑下的 config目錄下的config文件,所以config目錄下的所有文件都是會默認全部加載的
5 加載app/event.php數組里面的event .使用觀察者模式注冊到event類
6 加載app/service.php 然后調用register方法
~~
$response->send();
$http->end($response);
~~~