如何较好的学习框架底层源码?

  我发现很多工程师只停留在使用框架的层面,对框架底层根本不清楚,那么这就会给自己的职业生涯带来瓶颈,当遇到问题的时候根本无从下手如何排查,更别说去扩展核心库,如果大家对框架底层源码有一定的了解,这样的问题就变得简单很多, 学习框架贵在坚持,这会让您对PHP全局以及框架底层有质的飞跃, 总而言之: 做技术就得知道一个理念 – 知其然还得知其所以然,停留在会用阶段 职业生涯肯定走的不远!

  

图片描述

  那么有小伙伴就有质疑了,该如何选择框架学习呢?拿PHP来说,有很多框架,比如YII 、 TP、laravel等等,这几个都有自己的优势和特点,在国内TP确实用的很多,我想说的是具体学习哪个框架并不重要,我们需要选择一个安安心心的学好他的底层(如果您时间比较充裕的话,全部学习也是可以的,哈哈),因为你会了一个框架之后,其他框架你自学下很快就会上手,因为框架的核心思想基本是相通的,本文章我就拿TP来举例,我们如何学习他的源码呢?

图片描述

  我们需要从几个方向入手:

  一、 框架中是如何加载这些类库的?

  我认为学习框架底层 这一步是必须的,我们要知道框架是如何能加载不同目录下的不同文件,并且如果是通过composer安装的类库 也得知道他是如何被加载到框架的,这个时候可以去跟进think\Loader.php 文件即可。那我们研究完毕这个类库之后,我们还得自行的去做下思考, 比如我想自己创建一个自定义singwa目录(如图一) 也想把它被加载到框架中,如何做? 所以学习框架底层一定要带着问题和思考的态度去学习,这样成长肯定很快。

  ![图片描述](//img.mukewang.com/5c9fa23f00013dec04580516.png)

扫描二维码关注公众号,回复: 5853329 查看本文章

  

图片描述

  二、设计模式学习(工厂模式、单例模式、注册树模式、门面模式等)

  三、反射机制学习

  四、依赖注入 控制反转 等学习

  五、研究框架中的 容器、门面Facade

  think/Container think\Facade

  六、路由

  这里地方的分析 可以直接通过index.php 入口文件 一步一步的跟进,看看框架里面走了哪些流程, 可能这里面会用到一些其他的工具类,比如

  配置文件(config),

  环境变量:Env

  并且还得思考框架的路由是如何做的,在App类中 会走到routeInit路由初始化这个方法,这里面是路由的核心,它会引入其他的基础路由类库。

  七、底层控制器、模型、视图的基础类库分析

  八、其他一些工具类的分析 比如: 异常处理、缓存等核心类库分析

  总之上面这些基本涵盖了框架的核心内容,在研究框架源码的过程是一件枯燥和痛苦的事情,但是我们需要坚持,阅读框架代码不是看一遍就完事了,我们需要多看几遍,并且在看的过程中我们还需要做点如下几点:

  1、 在您有疑问的地方打上断点,输出相关的内容出来 看看他到底返回什么内容,因为这样更加直观,便于您真正意义上理解

  2、 我们需要思考 它为什么要这样做? 我这样做可以吗? 能不能变通、或者有没有更好的方法? 因为带着问题和思考的态度去学习 更加有利于您的个人成长。

  3、在研究源码的时候有不懂得地方肯定很正常的,这个时候一定要记住多利用百度或者谷歌

  4、一定一定要多画图, 因为您去研究源码然后还能通过图的方式画出来 这更加有基于您学习以及深入理解,它真的能起到事半功倍的作用! 比如下面这些图

  

图片描述

  图二 :在这个图中 就是类自动加载的时候会用到的一些属性,并且类的自动加载和他们息息相关。

  

图片描述

  图三: 底层容器的一些属性内容 , instances属性就是最终的容器核心。。。。

  

  图四: 框架底层配置文件走过的流程图

  

]

  图五:TP配置文件的种类

  还有很多图哈,这个地方我只是列举了一小部分,在这里我主要是想表达 我们一定要边看源码,边通过图例记录下来,因为它确实看上去很清楚,在您下次研究的时候绝对能起到很好的作用。

  其实当您研究完毕之后,我个人建议您可以通过这个框架的思想 自己写一个小小的框架,因为这样您就可以把这些知识点全部的串联起来,对您的帮助肯定非常巨大。

  总之: 您研究完毕这个TP框架之后,对您的技术成长会有质的飞跃的, 这样您再看其他的框架源码其实都是小意思了,比如YII等。

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/89152330