本书主要分为两个大部分,分别为: * 架构分析 * 自己实现一个框架 其中架构分析主要是分析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同事的公众号:编程说 ![](https://box.kancloud.cn/35c247d04677a5a8e2056920b9c93cdd_258x258.jpg) 扫码可以关注 本书目前还未完全完成,基本上每天都会保持更新和校正。如果书中有什么遗漏之处,还烦请大家指正过来,谢谢。