本書主要分為兩個大部分,分別為:
* 架構分析
* 自己實現一個框架
其中架構分析主要是分析TP的實現思想和思路。自己實現一個框架則是對實現思想和思路的實驗章節。
直接對TP框架源代碼進行注釋講解是非常容易的,但是為了大家方便理解,我們并沒有一開始就對TP框架的源代碼進行解讀。而是循環漸進,教會大家實現一個框架所需要用到的技術。然后當到一定程度的時候,在架構分析章節便會對TP源代碼進行解讀。
## 架構總結
本文檔并沒有在一個上帝的角度對框架的架構進行分析,而是具體講解到某一個功能時才分析到該功能使用了哪些技術,因此在這里對架構分析部分的各個小節使用到的技術做出了一個總結。
TP的架構主要是采用單入口文件,模塊化、MVC、驅動、行為和命名空間。這些架構的體現分別在:
* 單入口:入口文件
* 模塊化:請求分發
* MVC:模型實現,控制器和視圖
* 驅動:日志、模型實現
* 行為:鉤子
* 復用思想:模型實現
## 框架的組成
一個典型的現代框架通常會包含有路由、緩存、ORM、調試、DI、模板等等,而命名空間,自動加載,composer也是現代框架所必有的基本功能。TP5作為一個典型的現代框架,自然也擁有上述絕大部分特征。
不過相比其他現代框架,TP5跟其他框架有其優點也有其缺點。
首先,TP5是沒有DI(依賴注入)。并且框架各個部分的組成是相當緊密的,沒有進行抽象化,相互之間的調用都是直接了當(也正是因為如此,才不需要引入DI)。將網站應用作為一個完整的系統來看,分為框架和非框架的部分。框架部分內部獨立于非框架部分(用戶編寫的代碼),框架內部能夠直接了當地聯系,對于我們這些用戶而言好處是多多的(比如性能)。
然而,框架內部各部分聯系如此緊密,這一點倒是很讓很多人憂心忡忡,畢竟網上那么多人貶低(逃。他們的憂心并無道理,當一個項目越來越龐大的時候,如果不進行必要的抽象,項目只會越來越臃腫。像TP5框架里面還沒有一個接口,當在進行框架開發的時候,往往需要將整個框架理解透切之后才能進行。因此如果TP5一直沒有走組件化的道路的話,那么就一直需要一些優秀的掌舵人來把握TP的整體方向。
對于其他框架,比如nette,symfony他們都是將框架拆分成一個個組件。而且組件與組件之間的依賴并不是直接了當的,而是通過接口定義的對象,再通過依賴注入的方式進行使用(因此更需要依賴注入)。這種方式,框架內部各個部分幾乎都得到足夠的抽象。
綜合上面所述,TP5更適合于中小型的網站開發。而其他框架,比如symfony和nette則是比較適合中大型網站的開發。
## 面向API
近來的前端框架層出不窮,SPA的開發方式跟我們以前網站的開發方式有很大的不同。業務邏輯從后端轉移到了前端,前端的代碼越來越復雜,而且幾乎承當了應用的所有路由。而后端不再處理業務邏輯,轉而只提供API供SPA調用。這種工作方式被越來越多的公司采用,TP5主打的面向API開發,無疑也是順應潮流。
除了SPA的開發方式,面向API的開發對于開發服務型的網站應用也是相當有用(比如時下正火的各種云)。TP推出的主打面向API的框架,對于開發這些服務型的網站的開發團隊也另外提供了一種選擇。
## 調試器的安裝
在分析TP代碼的時候,經常需要使用斷點,因此大家最好機子上有安裝XDEBUG的擴展。
window上安裝配置比較簡單,對于linux的可以點[這里](https://code7070.github.io/blog/2017/06/10/nginx%E4%B8%8A%E9%85%8D%E7%BD%AEphp%E8%B0%83%E8%AF%95%E5%99%A8xdebug.html)。
推薦一個高級php同事的公眾號:編程說

掃碼可以關注
本書目前還未完全完成,基本上每天都會保持更新和校正。如果書中有什么遺漏之處,還煩請大家指正過來,謝謝。
- 簡介
- 架構分析
- 整體架構
- 入口文件
- 懶性加載
- tp5的類加載
- 請求分發
- 鉤子
- 模型
- 模型實現(一)
- 模型實現(二)
- 模型實現(三)
- 視圖
- 視圖
- 控制器
- 控制器
- 路由解析
- 響應解析
- 請求解析
- 模板
- 模板定位
- 布局
- 變量輸出
- 緩存
- 緩存實現
- 命令行
- 簡介
- think
- 其他
- 多語言實現
- 配置文件
- 錯誤異常控制
- 日志實現
- 調試解析
- 框架調試環境的搭配
- 安全
- TP的未來發展
- 自己實現一個框架
- 簡介
- 01_入口文件
- 02_請求分發
- 03_懶性加載
- 04_懶性加載_類映射
- 05_實現一個鉤子類
- 06_對錯誤和異常進行控制
- 07_為框架添加配置功能
- 框架與設計模式
- 01_工廠模式
- 02_原型模式
- 03_封裝類模式
- 04_觀察者模式
- 05_單例模式
- 05_算法抽象類模式
- 項目質量保證
- 01_測試框架的配置
- 02_thinkphp測試環境配置
- 03_數據庫測試
- 04_http測試