ThinkPHP原始碼閱讀1——-訪問流程
ThinkPHP訪問流程在手冊1.11系統流程裡就有介紹,我閱讀的ThinkPHP的版本是3.1.3,大家可以看下手冊,基本的流程也有,現在就是詳細去介紹一下ThinkPHP的訪問流程.(除錯模式下的,在部署模式下,會把中間的URL解析,檔案載入之類的,都封裝到一個檔案裡)
1.入口檔案(index.php)
入口檔案最常見得就是index.php,而在這裡可以定義專案名稱,路徑,快取檔案存放路徑之類的.最後要載入Thinkphp/ThinkPHP.php
指向下一個檔案的地方是require `ThinkPHP/ThinkPHP.php`;
2.ThinkPHP/ThinkPHP.php
這個檔案定義基本的系統目錄常量,框架引擎判斷,以及部署模式和除錯模式的判斷
指向下一個檔案的地方是 require THINK_PATH.`Common/runtime.php`;
3.runtime.php(~runtime.php)
PHP環境判斷,URL定義,專案目錄常量定義,核心檔案載入,專案目錄生成.
指向下一個檔案的地方是Think::Start();
4.Think.class.php
錯誤方式定義,異常定義,設定自動載入,快取配置引數,語言引數等
App::run();
5.App.class.php
設定時區,載入動態的專案公共檔案和配置檔案,一些系統常量的定義,如(IS_POST)等,POST,GET等傳值過濾,
指向下一個檔案的地方是Dispatcher::dispatch();在App.class.php的第38行
6.Dispatcher.class.php
URL解析,獲取分組,模組,操作名,包括URL四種方式的詳細定義,URL路由都在這裡定義的.
解析完成以後回到App.class.php並且執行App.exec
7.App.class.php App::exec
執行應用程式,包括前置和後置操作執行,當前方法執行,以及空模組判斷,(如IndexAction.class.php等,就會在這裡直接執行)
在執行IndexAction.class.php的時候,有extends繼承Action.class.php
8.Action.class.php基類
例項化檢視類 賦值,傳值給View,獲取Action,ajax判斷,這裡面的方法很多,值得仔細研究下.
在呼叫assign,display,show等方法的時候,會到View中操作.
9.View.class.php 檢視類
包括獲取IndexAction.class.php中定義的變數,以及解析模板,輸出模板等功能
執行下一檔案的方法 tag(`view_parse`,$params);在View.class.php View::fetch的方法中.
10. ParseTemplateBehavior.class.php 模板解析
其實是對快取的判斷以及對採用哪種模板引擎去解析模板.
在$tpl = Think::instance(`ThinkTemplate`); 在第62行
11. ThinkTemplate.class.php ThinkPHP的模板解析類
這裡才是真正得模板解析,包括對系統標籤的解析,以及對自定義標籤的判斷,解析完成以後直接放入快取然後include
相關文章
- ThinkPHP6 原始碼閱讀(十):事件PHP原始碼事件
- ThinkPHP6 原始碼閱讀(六):Url 解析PHP原始碼
- ThinkPHP6 原始碼閱讀(十一):FacadePHP原始碼
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- ThinkPHP6 原始碼閱讀(十二):系統服務PHP原始碼
- ThinkPHP6 原始碼閱讀(五):多應用解析PHP原始碼
- Scrapy原始碼閱讀分析_1_整體框架和流程介紹原始碼框架
- ThinkPHP6 原始碼閱讀(四):載入中介軟體PHP原始碼
- thinkphp5.1原始碼閱讀與學習(一、路由解析)PHP原始碼路由
- Scrapy原始碼閱讀分析_2_啟動流程原始碼
- Tomcat 原始碼閱讀記錄(1)Tomcat原始碼
- jQuery原始碼閱讀1—jQuery架構jQuery原始碼架構
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- ThinkPHP6 原始碼閱讀(三):應用程式初始化PHP原始碼
- ThinkPHP6 原始碼閱讀(七):中介軟體的執行PHP原始碼
- thinkphp5.1原始碼閱讀與學習(框架初始化)PHP原始碼框架
- gin原始碼閱讀之一 – net/http的大概流程原始碼HTTP
- iOS開發原始碼閱讀篇--FMDB原始碼分析1(FMResultSet)iOS原始碼
- ReactorKit原始碼閱讀React原始碼
- AQS原始碼閱讀AQS原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- NGINX原始碼閱讀Nginx原始碼
- Mux 原始碼閱讀UX原始碼
- HashMap原始碼閱讀HashMap原始碼
- fuzz原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- express 原始碼閱讀Express原始碼
- muduo原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- ThinkPHP6 原始碼閱讀(八):控制器操作的執行PHP原始碼
- ThinkPHP6 原始碼閱讀(九):傳送響應和收尾工作PHP原始碼
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- Scrapy原始碼閱讀分析_4_請求處理流程原始碼
- TiKV 原始碼閱讀三部曲(三)寫流程原始碼