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

ThinkPHP 是我用过(维护过)的最恶心的 PHP 框架,没有之一

  •  3
     
  •   GM · 2021-07-06 11:06:52 +08:00 · 10830 次点击
    这是一个创建于 1015 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想简洁高效的话,CI 不香吗? 想工程化一点的话,Yii 不香吗? 想优美的话,Laravel 不香吗?

    真弄不懂为什么会有人用这 shit 一样的 ThinkPHP 。


    迫于要维护一个 ThinkPHP 开发的辣鸡系统有感。

    (我吐槽的是 ThinkPHP 框架部分代码,而不是这个辣鸡系统的代码)

    第 1 条附言  ·  2021-07-06 13:05:33 +08:00
    我手头维护的这套是 ThinkPHP 6.0 的,够新了吧?

    各种地方一堆 public static function,想 override 扩展一下?抱歉,门都没有。
    91 条回复    2021-10-29 14:24:34 +08:00
    pcbl
        1
    pcbl  
       2021-07-06 11:10:11 +08:00
    能用来赚钱的就是好的,完善的中文文档和大量的中文用户这一条就很有吸引力了

    TP 的问题不是在代码好不好,而是改动太频繁,一些基础的方法改来改去的
    yiqiao
        2
    yiqiao  
       2021-07-06 11:26:42 +08:00
    @pcbl 中文文档一点都不完善,很多细节没有提到。你说的这个也有。
    很多人在 5.0 的时候还在用 3.2 的语法或者写法。导致代码异常难看。
    arronx
        3
    arronx  
       2021-07-06 11:28:08 +08:00
    TP 几?好歹也是个国产开源 10 多年的框架啊
    duduaba
        4
    duduaba  
       2021-07-06 11:31:23 +08:00
    TP 可是入行的启蒙导师,14 年时用 PHP 写接口用 TP 的很多
    x86
        5
    x86  
       2021-07-06 11:32:45 +08:00
    tp3.x 是上手太太太快了,后面的版本没用过
    charlie21
        6
    charlie21  
       2021-07-06 11:34:39 +08:00
    貌似外国也有专门维护老旧系统的人员 比如 ruby on rails 2 的维护人员,招个人专门来维护旧系统,开价反而比使用各类最新框架的人更高,因为
    人才市场上后者是供过于求,前者很少人做 供不应求 是冷门需求 故而能被开价很高
    justrand
        7
    justrand  
       2021-07-06 11:35:17 +08:00
    一直 CI
    ryh
        8
    ryh  
       2021-07-06 11:35:33 +08:00   ❤️ 1
    还有把 discuz 当 framework 用的呢,不是更恶心
    yefee
        9
    yefee  
       2021-07-06 11:35:47 +08:00
    TP 更新到现在已经很好用了,不比 ci 简洁性差,不比 yii 工程化弱,不比 laravel……算了,laravel 就是个镶着金边的拖拉机。

    网上吐槽 TP 的,很多都是 TP 老版本了吧。
    littleylv
        10
    littleylv  
       2021-07-06 11:38:07 +08:00
    建议楼主补充一下你吐槽的是具体某一个版本( 3.x,5.x,6.x ),还是全版本
    abccccabc
        11
    abccccabc  
       2021-07-06 11:41:46 +08:00
    唉,有啥好说的呀,在上海公交车上说自己是美国人的大妈,当了一次美国人后,回国后觉得高人一等。
    Rache1
        12
    Rache1  
       2021-07-06 11:42:57 +08:00
    @yefee 😂 给拖拉机道歉
    imnpc
        13
    imnpc  
       2021-07-06 11:43:49 +08:00
    TP 3.X 老框架了 问题比较多
    TP 5.X 还不错 改进很多
    TP 6.X 很多地方和 laravel 区别不大了 会 laravel 的很快就能上手
    towry
        14
    towry  
       2021-07-06 11:44:41 +08:00
    主要是有中文文档吧。

    估计很多 php 培训机构都是用这个的。
    abccccabc
        15
    abccccabc  
       2021-07-06 11:44:41 +08:00
    每一个版本的发展都是当时历史发展的见识,没必要说这个不好,那个不好。现在说以前不好,有意思吗?
    hzz2
        16
    hzz2  
       2021-07-06 11:45:48 +08:00
    @topthink 这种通常怎么看
    liuxu
        17
    liuxu  
       2021-07-06 11:45:59 +08:00
    tp:我让你用我了?
    tabris17
        18
    tabris17  
       2021-07-06 11:49:25 +08:00
    @yefee 现在的 TP 就是抄袭 Laravel 。作为一款曾经包含远程执行漏洞的框架还有什么好说的。

    TP 之所以会在国内流行,还得从 10 年前说起,当时还在流行 CakePHP,Zend Framework,对国内的 PHP 开发者来说太复杂了,而且中文信息不多,TP 这种野路子框架也就是因为这种情况才会在国内流行起来
    MengiNo
        19
    MengiNo  
       2021-07-06 11:52:24 +08:00
    想到一个事情。前几个月我去某省立医院找了个主任看牙,对方先说你这个牙之前的填充物如何如何,现在早就没有了,只能整个拆掉重新弄过。现在都用 A 材料,B 方案,要么就是种植了。我当时也回了句,不管怎么说,我这颗牙从 2000 年到现在是实实在在是经过了 20 年的检验,今年才崩掉的,您说的这些什么新的材料能保证再用 20 年么。
    abccccabc
        20
    abccccabc  
       2021-07-06 11:54:37 +08:00   ❤️ 1
    楼主,如果你硬要说 laravel 香,真想拍一巴掌,话说接手第三方一个项目,死活在 win 系统上运行不起来,然后弄了一个 alpine 的 docker 还跑不起来。X,什么鬼。搞得我被领导骂。最后查出来是他们代码使用了一个组件,这个组件太特殊了。在全量的 linux 里都正常,到了精简版的 alpine 里死翘翘。

    一个破 tp 到处跑的溜溜溜,你说那个香。
    manhere
        21
    manhere  
       2021-07-06 11:56:02 +08:00
    好歹也贴几行代码
    zhangchongjie
        22
    zhangchongjie  
       2021-07-06 11:56:52 +08:00
    最好的...算了
    tabris17
        23
    tabris17  
       2021-07-06 12:06:58 +08:00
    @MengiNo 20 年前补牙材料应该是汞齐合金,因为含有水银成分,所以会危害健康,虽然你补的牙坚挺了 20 年,但是你也中了 20 年的毒
    ZhiyuanLin
        24
    ZhiyuanLin  
       2021-07-06 12:13:09 +08:00   ❤️ 1
    说工程化的话,Symfony 面前 Yii 根本排不上号吧。
    herozzm
        25
    herozzm  
       2021-07-06 12:15:50 +08:00 via Android
    phalcon 哪里去了?
    sobigfish
        26
    sobigfish  
       2021-07-06 12:17:30 +08:00   ❤️ 1
    @abccccabc 为什么想不开用 Windows 跑 php 。😂
    测试? 直接虚拟机不香吗
    westoy
        27
    westoy  
       2021-07-06 12:18:46 +08:00   ❤️ 1
    @tabris17

    thinkphp 作者当年是搞 j2ee 改行的

    一开始一股 java 味儿

    后来就怼着各家框架抄特性

    当时三天两头被 fleaphp/qeephp 作者挂着婊...........
    MengiNo
        28
    MengiNo  
       2021-07-06 12:19:23 +08:00
    @tabris17 不是的,我当时门牙摔了,用的就是树脂光固化的,当年医生有说后续要换烤瓷,但我用到现在都感觉没什么问题就没去换。因为直到今年牙神经都还活的,我觉得没什么必要为了换烤瓷特意去杀神经。这次没办法,医生就是说没法补了只能给他做根管治疗了,现在等待做烤瓷中。至于银汞,感觉都是上个世纪的事情了 23333 。

    不过这不是重点,我想表达的是说一个老技术久经考验没有问题的,虽然新技术从理论上更好,更受推崇,但是能不能比老技术用的更久、更耐用、更香,这个其实还两说。哪怕现在烤瓷也好,种植也好最终也用了 20 年,那说白了也没有超过 20 年前的技术。所以也只能拭目以待看看这次换完能用多久。
    sagaxu
        29
    sagaxu  
       2021-07-06 12:43:13 +08:00 via Android
    国产框架双雄,jfinal 和 tp
    GarethChu
        30
    GarethChu  
       2021-07-06 12:51:07 +08:00
    TP 的老大在 v2
    myd
        31
    myd  
       2021-07-06 13:13:20 +08:00
    TP 6 确实 bug 很多,文档也很多错漏。TP5 比较好用
    996icu007007
        32
    996icu007007  
       2021-07-06 13:20:57 +08:00
    是人的问题吧 嘿嘿嘿嘿
    996icu007007
        33
    996icu007007  
       2021-07-06 13:21:39 +08:00
    自己写一个就好了啊
    wowbaby
        34
    wowbaby  
       2021-07-06 13:44:25 +08:00
    手头还有几个 tp3.x 老项目,还要维护,每次要改点东西,真的害怕,都是屎山一样的代码,不想动。
    其它 php 项目都是 yii2 开发的,随便怎么改,都不怕。
    littleangel
        35
    littleangel  
       2021-07-06 13:50:11 +08:00
    看了标题 还以为 是我自己来 v2 发的帖子呢
    keepeye
        36
    keepeye  
       2021-07-06 13:51:46 +08:00
    惭愧,当年用 tp3 写了一个项目,上线后跑了,七八年过去了该项目还在迭代,给后面接手过的兄弟道个歉
    JaguarJack
        37
    JaguarJack  
       2021-07-06 13:56:12 +08:00
    求求你,别骂了,给点面子
    madpecker009
        38
    madpecker009  
       2021-07-06 14:01:07 +08:00
    tp 才是 yyds,,,
    yefee
        39
    yefee  
       2021-07-06 14:03:56 +08:00
    @tabris17 甭管是否抄袭,曾经有漏洞就意味着他一辈子都不行?其他框架历史上就没有出现过漏洞?其次,你自己都承认,国外框架对国内开发者来说太复杂了,TP 容易上手,这不就是 TP 的优势吗。
    yefee
        40
    yefee  
       2021-07-06 14:04:55 +08:00
    同样的帖子真的没意义,Laravel 是我用过最恶心的 PHP 框架,没有之一。我也能给你讲出一堆理由。
    abccccabc
        41
    abccccabc  
       2021-07-06 14:05:24 +08:00
    @sobigfish 8G 内存,实在跑不动 docker 了。更不用说虚拟机了,更吃内存。还有就是验证代码的兼容性。
    yefee
        42
    yefee  
       2021-07-06 14:06:11 +08:00
    TP6 不如 TP5 好用倒是真的,TP6 改动太过于激进了
    Mitt
        43
    Mitt  
       2021-07-06 14:09:44 +08:00
    真巧,我最近刚接手一个 thinkPHP5 的项目,我本身是用 Yii2 的,看了几天这个项目代码确实恶心到人了,很多东西现代框架都有的它没有,不仅框架使用上感觉很烂,用这个框架的人写的代码更烂,整个项目就是座屎山
    Mitt
        44
    Mitt  
       2021-07-06 14:10:32 +08:00
    @Mitt #42 而且最烦的是这个 thinkPHP 版本就落后几个小版本号,网上已经能找到成吨的远程命令漏洞,而且还都能复现
    Symo
        45
    Symo  
       2021-07-06 14:11:31 +08:00
    @MengiNo 美国的铅水管从 1920 年使用了接近一百年, 也可以说是久经考验了. 要用发展的眼光看问题.
    yxzblue
        46
    yxzblue  
       2021-07-06 14:25:53 +08:00
    我顶楼主
    fork3rt
        47
    fork3rt  
       2021-07-06 14:28:42 +08:00
    漏洞挺多的,很多都可以直接 get webshell
    young
        48
    young  
       2021-07-06 14:29:54 +08:00
    @Mitt #43 深有体会,各种奇技淫巧
    ztxcccc
        49
    ztxcccc  
       2021-07-06 14:34:11 +08:00
    不会真的有人不用 symfony 吧(
    watcher
        50
    watcher  
       2021-07-06 14:54:27 +08:00
    楼主没有资格说要从实力上与 thinkphp 对话
    wooop
        51
    wooop  
       2021-07-06 15:02:12 +08:00
    风铃 CMS 系统( PHP )的支付接口和回调的二次开发预算 500 左右 有做的么
    way2create
        52
    way2create  
       2021-07-06 15:17:40 +08:00
    我也不喜欢用 但有时不是我说了算 凑合着用了
    abersheeran
        53
    abersheeran  
       2021-07-06 16:49:12 +08:00
    幸好我写的框架基本各个部件都可以 override……
    abccccabc
        54
    abccccabc  
       2021-07-06 17:43:42 +08:00
    我就想着,开骂国产框架的人,会不会骂国产车呢?^_^……^_^
    mengdodo
        55
    mengdodo  
       2021-07-06 17:57:23 +08:00
    话说我司曾经拿来一个 tp3 的项目让我改。我当时想这么老的东西,万一以后 web shell 了,我到底背不背这口锅哦~
    falcon05
        56
    falcon05  
       2021-07-06 18:06:01 +08:00 via iPhone
    很多培训机构就喜欢这玩意
    ragnaroks
        57
    ragnaroks  
       2021-07-06 18:11:56 +08:00
    能用 CI 完成的都用 CI,不能用 CI 完成的换语言
    chenqh
        58
    chenqh  
       2021-07-06 18:25:57 +08:00
    想问下为什么 override 不了?
    oneforallsoft
        59
    oneforallsoft  
       2021-07-06 18:39:59 +08:00
    @abccccabc
    什么组件来着? 不能因为组件而怎么怎么
    laravel 好 文档好 别人分享出来的东西好
    码农不就是拷贝粘贴么
    最怕的就是要看源码的 文档很少 别人分享的很少的
    cokyhe
        60
    cokyhe  
       2021-07-06 19:01:17 +08:00 via iPad
    Laravel 用了就不会写 php 了
    haha512
        61
    haha512  
       2021-07-06 19:11:00 +08:00
    用个框架还用出阶级仇恨来了
    we8105
        62
    we8105  
       2021-07-06 19:12:45 +08:00
    真是 有框架用就不错了

    还有就是怎么还在用 php 呀
    zxcslove
        63
    zxcslove  
       2021-07-06 19:20:10 +08:00
    很多产品的问题都出在文档上吧,tp6 这方面很突出。文档描述和实际情况不一样,各种遮遮掩掩,没有详细参考。
    abccccabc
        64
    abccccabc  
       2021-07-06 20:22:40 +08:00
    @oneforallsoft 最终这个问题是对方解决的。也没和我多说。
    JaguarJack
        65
    JaguarJack  
       2021-07-06 20:48:42 +08:00
    @zxcslove 主要经常改底层接口
    akira
        66
    akira  
       2021-07-06 22:11:01 +08:00
    适合新人上手
    MengiNo
        67
    MengiNo  
       2021-07-07 02:07:48 +08:00   ❤️ 1
    @abccccabc 感觉是你配置哪里不对,或者电脑有问题。我在腾讯云、阿里云上随便开一个 1 核 2G 的机器,在上面装个 docker,启动个 Laravel 项目的容器,用自己笔记本的 vscode-remote 连到服务器的 容器 内开发。算上 vscode PHP 相关的 5 、6 个插件,2G 内存同时开 两个 这样的容器完全不费劲,何况是本地的 docker 。而且用 alpine 为底最大的作用还是减少硬盘的占用,内存方面 PHP 作为非常驻内存的语言来说,本地测试没什么量的情况下基本不占用多少。要精细控制的话 docker 的 desktop 版本也都有带 docker swarm,加个配置轻松就可以限制单个容器的内存占用。

    在加上 alpine 作为精简包一般都是作为线上环境自定义镜像的底。开发、测试环境用这种底,连个基础的 ps 、tail 工具都没有,装一些 PHP 扩展 大概率也会缺包。虽然可以后续去装,但开发、测试环境本身不就是为了快速的使用、方便调试。这样还需要后续调试半天,使用场景也不太合适。至于验证兼容性从结果上看就更不存在了,毕竟最终上线部署的服务器绝大部分都是 Linux,开发和测试环境要尽可能仿真。如果他在 Windows 上行,上线到 Linux 之后出现一些奇奇怪怪的问题,那还说兼容性不行(不过这也算常态,不然 docker 也不会这么火)。如今反过来,还是本地环境配置不到位。

    最终还是知其然要知其所以然,alpine 这类精简发行版到底精简了什么,或者反过来说你这个项目到底依赖什么,缺了会导致什么问题。这点没有概念的话,哪怕用 Golang 这种最终编译成二进制文件的、只与平台相关几乎和外部环境无关的情况下,无脑用 alpine 照样大概率跑不起来。用这种论据说 Laravel 不如 TP,个人还是不太认可的,只能说 TP 相对于 Laravel 依赖更少,但依赖更少在现代包管理软件的加持下,只能算中立属性,并不算什么核心的优点。
    shellic
        68
    shellic  
       2021-07-07 09:10:25 +08:00
    其实垃圾的主要还是人,项目开始前就定好了规范,总有人写着写着就放飞自我了
    killerv
        69
    killerv  
       2021-07-07 09:27:12 +08:00
    @abccccabc 我觉得应该不是 Laravel 的锅,我们在 Alpine 上跑过 Laravel,可能是项目依赖的组件需要某些 lib
    dongtingyue
        70
    dongtingyue  
       2021-07-07 09:45:41 +08:00
    只是你不熟而已,个人认为最香的是自己用 composer 搭的,简洁明了。
    不能扩展这个槽点应该是不存在的
    abccccabc
        71
    abccccabc  
       2021-07-07 10:06:21 +08:00
    @MengiNo 第三方也给我解释的含含糊糊。反正问题已经解决,所有平台都能跑起来,也就没有再继续追问对方。


    @killerv 没错,是依赖某些组件,这个组件在全量的 linux 系统里运行没有问题,对方给我们演示时,mac,centos 都正常,但到了 alpine 环境就残了,不能走路了。
    ykrank
        72
    ykrank  
       2021-07-07 10:35:23 +08:00
    @MengiNo 10-30 这 20 年和 30-50 这 20 年可不是一个人体状态
    killerv
        73
    killerv  
       2021-07-07 11:34:30 +08:00
    @abccccabc 这个在我看来不是 Laravel 的问题,就是系统选择和配置的问题,因为 alpine 就是残的,最近我们的某个 node 项目,在 node 容器镜像(基于 Debian )下都得额外安装一些 lib,alpine 缺的就更多了。
    nate375
        74
    nate375  
       2021-07-08 09:13:00 +08:00
    这个作为入门学习很有用
    GM
        75
    GM  
    OP
       2021-07-08 09:32:55 +08:00
    @nate375

    入门还是建议拿个代码风格良好、结构简单的框架来入门,比如 CI 。

    不然一开始就养成不好习惯了,后续纠正那可就难了,比如体育教练喜欢教什么都不会的新人,而不是野路子了很久、一堆不良习惯纠正不过来的人。
    ZiShuo
        76
    ZiShuo  
       2021-07-09 11:02:49 +08:00
    一个框架如果不认可,你可以选择不用或者是自己写个更优秀的开源出来,看楼主能不能把开源也和 TP 一样做 10 年,就这份毅力都是很了不起了,再者一个月薪几 K 几十 K 的人又有什么资格去批判一个已经有一定市场占有率的系统,或许你的工资总和还不如你口中这个垃圾系统创造的价值,说难听点你还不够格。
    GM
        77
    GM  
    OP
       2021-07-09 13:40:04 +08:00
    @ZiShuo 对,如果你对已经花几千块钱购买的冰箱制冷效果不认可,你可以选择扔掉或者是自己造个更好的出来分享给大家使用,看看你能不能也像冰箱厂商一样做十年,就这份毅力都是很了不起了,再者一个月薪几 K 几十 K 的人又有什么资格去批判一个已经有一定市场占有率的冰箱,或许你的工资总和还不如你口中这个垃圾系统创造的价值,说难听点你还不够格。
    thinkingbullet
        78
    thinkingbullet  
       2021-07-10 09:44:24 +08:00
    框架只是工具,如果你看他不顺眼你自己造一个工具,如果没那个实力你可以换一个其他工具,如果其他工具也不能满足你,那你就给框架提代码提 pr,如果你啥都不做只想别人为你改变,那你终将一事无成.
    wangyzj
        79
    wangyzj  
       2021-07-12 09:26:31 +08:00
    依旧坚持在 tp3.2 上
    lhg1397
        80
    lhg1397  
       2021-07-14 09:52:18 +08:00
    为什么要用 php 不然换语言
    GM
        81
    GM  
    OP
       2021-07-14 12:41:40 +08:00
    @lhg1397

    因为:

    迫于要维护一个 ThinkPHP 开发的辣鸡系统


    历史遗留屎山,不是想换就能换的,要是能换我还吐槽个啥啊。
    topthink
        82
    topthink  
       2021-07-16 14:09:31 +08:00   ❤️ 1
    首先我想说的是 框架没有好坏之分 正如语言没有好坏之分 不同的框架有不同的定位和用户群,这个和汽车一样。TP 一直在保持更新迭代,因为我们心中也觉得不够完美,不能说你觉得这个地方不满足你的需求就是垃圾,喷的时候还是建议多点实际的例子(你文中举得例子真的很奇怪 ~或者是我孤陋寡闻了)。为什么你们总是会要求要维护一个 TP 开发的系统 ,这说明什么?不就是用的人多么,大家又不是傻子,官方也没有忽悠他用。一个项目团队尤其是创业团队 在框架的选型上一定会经过考虑的,没有最完美的框架,只有最适合的框架。否则国内就不会没有一个比 TP 能打的框架出来~真正屎一样的框架和代码你还没见过 你才用了 TP 多久
    wueryi
        83
    wueryi  
       2021-07-16 15:26:36 +08:00
    楼主维护过 phpcms 和 ecshop 吗?感觉这两个维护起来更不容易接受。。
    Evilk
        84
    Evilk  
       2021-07-17 22:10:48 +08:00
    问一下
    `public static function`扩展性很差吗?
    GM
        85
    GM  
    OP
       2021-07-18 19:44:10 +08:00
    @Evilk

    看情况,在不合适的场合用了就是导致别人无法扩展。

    比如,
    public static function doSth() {} 将会导致别人直接 klazz::doSth() 这样调用,而不是 $obj->doSth() 这调用。


    结果就是你想重载一下这个方法却没办法,只能硬改代码。
    imxieke
        86
    imxieke  
       2021-07-19 01:18:44 +08:00 via iPhone
    @topthink 文档细节太少了 还需要自己去翻源码去找 比如 command
    zjsxwc
        87
    zjsxwc  
       2021-07-24 18:03:51 +08:00 via Android
    有没有对于已有无脑 static 全局方法,重构的技巧推荐?
    lyhiving
        88
    lyhiving  
       2021-08-19 12:40:52 +08:00
    早日脱坑,Laravel 才是未来。
    zhennann
        89
    zhennann  
       2021-09-26 16:37:56 +08:00
    用过 node 的 CabloyJS 也许会改变对 php 的认知
    chenzheyu
        90
    chenzheyu  
       2021-10-29 14:19:50 +08:00   ❤️ 1
    我很庆幸我的第一份 php 工作是写 laravel
    chenzheyu
        91
    chenzheyu  
       2021-10-29 14:24:34 +08:00
    @MengiNo 开发用 laradock 环境,线上还是要用 alpine 版本的 php 做底。alpine 还是要稍微测试下的,前几天镜像里面加 grpc 服务就发现缺了一个 linux-header
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1051 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:14 · PVG 03:14 · LAX 12:14 · JFK 15:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.