请选择 进入手机版 | 继续访问电脑版
 找回密码
 中文注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

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

0
回复
452
查看
[ 复制链接 ]

8

主题

8

帖子

6

积分

小酷一级

Rank: 1

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

oSZei9W278871f72.jpg

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

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

iwAO86oWGwOGjNGU.jpg

二、设计模式学习(工厂模式、单例模式、注册树模式、门面模式等)
三、反射机制学习
四、依赖注入 控制反转 等学习
五、研究框架中的 容器、门面Facade
think/Container think\Facade
六、路由
这里地方的分析 可以直接通过index.php 入口文件 一步一步的跟进,看看框架里面走了哪些流程, 可能这里面会用到一些其他的工具类,比如
配置文件(config),
环境变量:Env
并且还得思考框架的路由是如何做的,在App类中 会走到routeInit路由初始化这个方法,这里面是路由的核心,它会引入其他的基础路由类库。
七、底层控制器、模型、视图的基础类库分析
八、其他一些工具类的分析 比如: 异常处理、缓存等核心类库分析
总之上面这些基本涵盖了框架的核心内容,在研究框架源码的过程是一件枯燥和痛苦的事情,但是我们需要坚持,阅读框架代码不是看一遍就完事了,我们需要多看几遍,并且在看的过程中我们还需要做点如下几点:
1、 在您有疑问的地方打上断点,输出相关的内容出来 看看他到底返回什么内容,因为这样更加直观,便于您真正意义上理解
2、 我们需要思考 它为什么要这样做? 我这样做可以吗? 能不能变通、或者有没有更好的方法? 因为带着问题和思考的态度去学习 更加有利于您的个人成长。
3、在研究源码的时候有不懂得地方肯定很正常的,这个时候一定要记住多利用百度或者谷歌
4、一定一定要多画图, 因为您去研究源码然后还能通过图的方式画出来 这更加有基于您学习以及深入理解,它真的能起到事半功倍的作用! 比如下面这些图

ddVdsGrM6V9RZV6s.jpg

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

Thej433VJLEeHiiL.jpg

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

kdRr66z6u3T64e3m.jpg

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

] YPFHQ33973XQi935.jpg

图五:TP配置文件的种类
还有很多图哈,这个地方我只是列举了一小部分,在这里我主要是想表达 我们一定要边看源码,边通过图例记录下来,因为它确实看上去很清楚,在您下次研究的时候绝对能起到很好的作用。
其实当您研究完毕之后,我个人建议您可以通过这个框架的思想 自己写一个小小的框架,因为这样您就可以把这些知识点全部的串联起来,对您的帮助肯定非常巨大。
总之: 您研究完毕这个TP框架之后,对您的技术成长会有质的飞跃的, 这样您再看其他的框架源码其实都是小意思了,比如YII等。

酷微米 - 社区版权 - 免责声明1、根据二○一三年一月三十日《计算机软件保护条例》2次修订第17条规定
2、为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件;
3、可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
4、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
5、本站所有主题由该帖子作者发表,该帖子作者与酷微米享有帖子相关版权
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和酷微米的同意
7、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
8、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
9、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
10、酷微米管理员和版主有权不事先通知发贴者而删除本文
--- 特别提示:本站资源非代理用户严禁传播倒卖,不遵守规定者,酷微米有权封号而不作另行通知! ---

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文注册

本版积分规则

酷微米 你我共享 为兴趣而生,全网资源一网打尽。 立即登录 中文注册
发布主题 快速回复 收藏帖子 返回列表 官方QQ群