ThinkPHP 6.0 核心代码分析

2019-11-07 00:36:42 +08:00
 hubqin
分析完一遍 ThinkPHP 6.0 的核心代码,使用 phpstorm+xdebug 调试,反复走流程,直到弄懂,一遍下来,收获良多,对整个生命周期有种滚瓜烂熟的感觉。最难的管道模式实现的中间件,苦苦思索了好几天,竟然也弄懂了。
最近把所有分析汇总起来,稍加梳理,查漏补缺,整理成册,分享出来。
文档地址: https://www.kancloud.cn/hubqin/thinkphp/content
7423 次点击
所在节点    PHP
39 条回复
WytheHuang
2019-11-07 11:47:29 +08:00
@bzj #17 楼主在分享, 扯一些跟楼主分享无关的。 这是自嘲?我怀疑你理解能力也不行, 老弟
wangyzj
2019-11-07 12:02:53 +08:00
没有 M 方法的 tp 深深的伤害了我的心
bzj
2019-11-07 12:03:39 +08:00
@WytheHuang 难道你说的跟楼主分享有关?当然让你说你也说不出来点啥有用的
AyanamiRei
2019-11-07 12:17:05 +08:00
发现要是有跟 PHP 有关的话题总是能吵起来, 能不能好好关注重点
WytheHuang
2019-11-07 12:18:23 +08:00
@bzj 对对对,你说的对,然后呢?
hubqin
2019-11-07 12:41:10 +08:00
@set01 #12 @Sikoay #13
有计划读一遍 laravel,之前稍微看过一些,laravel 给你的感觉就是精心雕琢,功能非常齐全,你想要的方法基本能找到。但非常厚重,层层封装,特别绕。与之相比,tp6.0 是越来越像 laravel,“系统服务”就是 laravel 的服务提供者,中间件的实现使用管道模式,跟 laravel 的实现比较也是相差无几(要是我看了 laravel 的 pineline 实现中间件,我也会毫不犹豫使用它的方法,因为实在简洁、精妙、由衷服了,看看 tp5.1 的中间件实现,简直天壤之别)。
hubqin
2019-11-07 12:43:42 +08:00
@NerverLibis #11 哈哈,现在学一个顶两,挺划算的。
dvaknheo
2019-11-09 20:08:06 +08:00
@hubqin pineline 实现中间件有什么好处?,或者中间件有什么好处?
如果不用中间件,能不能解决。

至少我看到一个坏处是堆栈没法看。
这也就是中间件技术把 PHP 带歪的地方。
hubqin
2019-11-10 11:20:11 +08:00
@dvaknheo 中间件可以很方便对请求进行过滤、拦截,而不用修改原有的类,实现各类与类之间的松耦合; pipeline 模式可以说是装饰器模式的一个变种,只是传递的东西变成了一个闭包,同样也是解耦,剥离与业务无关的代码。
如果不用中间件,可以使用类的继承来实现,在父类中去过滤请求,可能 yii2 框架就倾向于使用类的继承。
dvaknheo
2019-11-10 12:46:41 +08:00
@hubqin
我记得洋葱模型 node-js 解决协程 用的。 分两个接口,执行前,执行后 要好得多。
不然堆栈里真的没法看出来是什么引发的问题。

还是觉得显式方式拦截的好。 直接看代码调用堆栈就知道哪里出了问题。
控制器就是要干这个的。

当然,我们也可以保留 钩子模式。但是没必要让钩子的作者搞得这么舒服(前后依赖关系自动化等。
以告诉钩子:用了高级性能,要自己小心。
a67793581
2019-11-11 11:31:20 +08:00
已通读 感谢作者的无私奉献
Junjunya
2019-11-12 11:53:44 +08:00
写的很好 ,适合新手去跟着源码读一读
jimmzhou
2019-11-13 10:08:18 +08:00
@hubqin 29 我怎么觉得 pipeline 是责任链模式呢
hubqin
2019-11-13 11:50:18 +08:00
@jimmzhou 确实很像,但装饰模式是可以无限递归的调用的,而责任链模式是有一个处理了就结束。
hubqin
2019-11-13 11:50:40 +08:00
@a67793581 速度好快。
zhz0529
2019-11-19 22:40:18 +08:00
厉害了,感谢作者的无私奉献
KamioMisuzu
2019-11-24 03:58:11 +08:00
您好 可以转载吗 会写明作者和源地址
hubqin
2019-11-24 15:41:18 +08:00
@KamioMisuzu 可以
FlexGap
2019-12-01 22:45:44 +08:00
厉害了,打算学习下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/617048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX