首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

ThinkPHP 6.0 核心代码分析

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

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

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

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

    当然,我们也可以保留 钩子模式。但是没必要让钩子的作者搞得这么舒服(前后依赖关系自动化等。
    以告诉钩子:用了高级性能,要自己小心。
        31
    a67793581   25 天前
    已通读 感谢作者的无私奉献
        32
    Junjunya   24 天前
    写的很好 ,适合新手去跟着源码读一读
        33
    jimmzhou   23 天前
    @hubqin 29 我怎么觉得 pipeline 是责任链模式呢
        34
    hubqin   23 天前
    @jimmzhou 确实很像,但装饰模式是可以无限递归的调用的,而责任链模式是有一个处理了就结束。
        35
    hubqin   23 天前
    @a67793581 速度好快。
        36
    zhz0529   16 天前
    厉害了,感谢作者的无私奉献
        37
    KamioMisuzu   12 天前 via iPhone
    您好 可以转载吗 会写明作者和源地址
        38
    hubqin   12 天前
    @KamioMisuzu 可以
        39
    FlexGap   4 天前
    厉害了,打算学习下。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2361 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 12:46 · PVG 20:46 · LAX 04:46 · JFK 07:46
    ♥ Do have faith in what you're doing.