hubqin
V2EX  ›  PHP

ThinkPHP 6.0 核心代码分析

  •  3
     
  •   hubqin · Nov 7, 2019 via Android · 8984 views
    This topic created in 2555 days ago, the information mentioned may be changed or developed.
    分析完一遍 ThinkPHP 6.0 的核心代码,使用 phpstorm+xdebug 调试,反复走流程,直到弄懂,一遍下来,收获良多,对整个生命周期有种滚瓜烂熟的感觉。最难的管道模式实现的中间件,苦苦思索了好几天,竟然也弄懂了。
    最近把所有分析汇总起来,稍加梳理,查漏补缺,整理成册,分享出来。
    文档地址: https://www.kancloud.cn/hubqin/thinkphp/content
    39 replies  •  2019-12-01 22:45:44 +08:00
    qqxx520
    qqxx520
    Nov 7, 2019 via iPhone❤️1
    1
    谢谢分享
    suners
    suners
    Nov 7, 2019
    2
    楼主的精神很值得学习,平时自己用框架大多数只存在于用的层面,很少亲自去跟踪和分析核心代码,以后要多多跟楼主学习
    2379920898
    2379920898
    Nov 7, 2019
    3
    你看看都没人搞 PHP 了,连个给你回复的都没有,真可怜的 PHP
    hubqin
    hubqin
    OP
    Nov 7, 2019❤️2
    4
    @2379920898 还好啦,自动加载、依赖注入、中间件、观察模式(事件)……这些在其他语言也适用,先在一门深入了再说,不然,学多门语言,很可能即使换了一门语言写 CURD 而已。
    1O
    1O
    Nov 7, 2019
    5
    @2379920898 搞 PHP 的没时间摸鱼
    hubqin
    hubqin
    OP
    Nov 7, 2019
    6
    @suners 多谢支持。觉得源代码就是最好的文档,官方文档往往不全面。
    assad
    assad
    Nov 7, 2019
    7
    支持一个啊,学习学习
    sorshion
    sorshion
    Nov 7, 2019
    8
    不错,支持一个
    ben1024
    ben1024
    Nov 7, 2019
    9
    支持下[赞]
    WytheHuang
    WytheHuang
    Nov 7, 2019❤️6
    10
    @2379920898 #3 “端起碗吃肉,放下筷子骂娘” ? 8 天前还在找 PHP 全栈职位, 现在就说可怜的 PHP?
    NerverLibis
    NerverLibis
    Nov 7, 2019 via iPhone❤️1
    11
    讲得很好 照抄 laravel
    set01
    set01
    Nov 7, 2019
    12
    楼主有没有想法 整一个 laravel 版本的?
    Sikoay
    Sikoay
    Nov 7, 2019
    13
    @set01 我也想搞一个 Laravel 的源码分析
    PainfulJoe
    PainfulJoe
    Nov 7, 2019❤️2
    14
    @2379920898 骂 PHP 的基本都是以前就是干 PHP 的,真的这么想否定曾今的自己吗?
    lepig
    lepig
    Nov 7, 2019
    15
    感谢 楼主分享、
    niucility
    niucility
    Nov 7, 2019
    16
    不要恶意揣测啊,可能只是自嘲一下呢.
    bzj
    bzj
    Nov 7, 2019
    17
    @WytheHuang

    不要太敏感 别人只是自嘲 我怀疑你理解能力不行
    Canon1014
    Canon1014
    Nov 7, 2019
    18
    期待 Laravel 版,或者看完楼主这套流程自己去看一遍
    abccccabc
    abccccabc
    Nov 7, 2019
    19
    @NerverLibis 人家疼训哪款产品 不是抄的,最后还把人家给抄死了,就看谁能活到最后。
    xjmroot
    xjmroot
    Nov 7, 2019
    20
    感谢楼主分享,学习学习
    WytheHuang
    WytheHuang
    Nov 7, 2019
    21
    @bzj #17 楼主在分享, 扯一些跟楼主分享无关的。 这是自嘲?我怀疑你理解能力也不行, 老弟
    wangyzj
    wangyzj
    Nov 7, 2019
    22
    没有 M 方法的 tp 深深的伤害了我的心
    bzj
    bzj
    Nov 7, 2019
    23
    @WytheHuang 难道你说的跟楼主分享有关?当然让你说你也说不出来点啥有用的
    AyanamiRei
    AyanamiRei
    Nov 7, 2019
    24
    发现要是有跟 PHP 有关的话题总是能吵起来, 能不能好好关注重点
    WytheHuang
    WytheHuang
    Nov 7, 2019 via Android
    25
    @bzj 对对对,你说的对,然后呢?
    hubqin
    hubqin
    OP
    Nov 7, 2019
    26
    @set01 #12 @Sikoay #13
    有计划读一遍 laravel,之前稍微看过一些,laravel 给你的感觉就是精心雕琢,功能非常齐全,你想要的方法基本能找到。但非常厚重,层层封装,特别绕。与之相比,tp6.0 是越来越像 laravel,“系统服务”就是 laravel 的服务提供者,中间件的实现使用管道模式,跟 laravel 的实现比较也是相差无几(要是我看了 laravel 的 pineline 实现中间件,我也会毫不犹豫使用它的方法,因为实在简洁、精妙、由衷服了,看看 tp5.1 的中间件实现,简直天壤之别)。
    hubqin
    hubqin
    OP
    Nov 7, 2019
    27
    @NerverLibis #11 哈哈,现在学一个顶两,挺划算的。
    dvaknheo
    dvaknheo
    Nov 9, 2019❤️1
    28
    @hubqin pineline 实现中间件有什么好处?,或者中间件有什么好处?
    如果不用中间件,能不能解决。

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

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

    当然,我们也可以保留 钩子模式。但是没必要让钩子的作者搞得这么舒服(前后依赖关系自动化等。
    以告诉钩子:用了高级性能,要自己小心。
    a67793581
    a67793581
    Nov 11, 2019
    31
    已通读 感谢作者的无私奉献
    Junjunya
    Junjunya
    Nov 12, 2019
    32
    写的很好 ,适合新手去跟着源码读一读
    jimmzhou
    jimmzhou
    Nov 13, 2019
    33
    @hubqin 29 我怎么觉得 pipeline 是责任链模式呢
    hubqin
    hubqin
    OP
    Nov 13, 2019
    34
    @jimmzhou 确实很像,但装饰模式是可以无限递归的调用的,而责任链模式是有一个处理了就结束。
    hubqin
    hubqin
    OP
    Nov 13, 2019
    35
    @a67793581 速度好快。
    zhz0529
    zhz0529
    Nov 19, 2019
    36
    厉害了,感谢作者的无私奉献
    KamioMisuzu
    KamioMisuzu
    Nov 24, 2019 via iPhone
    37
    您好 可以转载吗 会写明作者和源地址
    hubqin
    hubqin
    OP
    Nov 24, 2019
    38
    @KamioMisuzu 可以
    FlexGap
    FlexGap
    Dec 1, 2019
    39
    厉害了,打算学习下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5322 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1485ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
    ♥ Do have faith in what you're doing.