最近接了个上古 PHP 项目,看到代码的那一刻,我死的心都有了,求解脱 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
danhahaha
V2EX    程序员

最近接了个上古 PHP 项目,看到代码的那一刻,我死的心都有了,求解脱

  •  
  •   danhahaha 2017-05-06 09:34:44 +08:00 10301 次点击
    这是一个创建于 3159 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近接了个项目,需求很简单,对方也要求低,薪酬不错,所以就爽快的答应了

    但是看到代码那一刻才明白,我他妈的是掉到坑里了

    怎么说呢,我大一时候学的 php,当然开始时候是用原生 php,没觉得不妥,慢慢的做了 1 年,使用框架,才知道原生真的很难拓展,修改,现在用习惯了 laravel,symfony 这种现代框架,看到原生真的是想哭啊。

    感觉是另外一种语言。

    关键是这套系统全是 sql 原生查询啊,根目录全是 php 文件啊,html 全是表格嵌套啊,js 全是自己写的啊,居然还用了 git 版本控制,但是没什么鸟用,大概只是后来的接盘侠提交了不到 20 个页面,其他的估计就只有这位上古程序员知道什么是什么了,最最关键的是这位技术记性,逻辑极其牛逼,项目涉及到大量的积分,支付结算,慢慢的逻辑

    我爱 php,知道很多人说 php 不好,但是我觉得没什么,因为 php 上手快,出活快,赚钱也快,但是看到这个,我真的不知道该怎么办了,活是肯定要继续的,客户比较好,按时间付费,求各位大神有没有什么办法,或者简单框架可以再原生基础上快速重构,或者改版,或者什么的容易结合使用的?

    71 条回复    2017-05-08 14:59:44 +08:00
    viko16
        1
    viko16  
       2017-05-06 09:37:31 +08:00 via Android   1
    退订跑路!
    gouchaoer
        2
    gouchaoer  
       2017-05-06 09:41:19 +08:00 via Android   1
    你 laravel 都能学会,单页肯定没问题
    U7Q5tLAex2FI0o0g
        3
    U7Q5tLAex2FI0o0g  
       2017-05-06 09:41:38 +08:00   1
    如果这个项目原先的功能不多不复杂,直接整个项目重构好了,你后续新增功能也方便
    如果之前已经非常复杂了,还是不要动,毕竟如果你对之前的功能逻辑不清楚的情况下贸然重构。。。

    取舍吧
    danhahaha
        4
    danhahaha  
    OP
       2017-05-06 09:46:49 +08:00
    @littleylv 客户要改的是前端,之前很丑,要改模板,但是全是 echo + 表格
    gyorou
        5
    gyorou  
       2017-05-06 09:47:16 +08:00   1
    我之前接收过的上古 php 项目,一个 http 的 request 从 socket 的绑定开始写。
    kn007
        6
    kn007  
       2017-05-06 09:51:35 +08:00
    这个只能花时间。没别的办法。很尴尬。
    ChopMoun
        7
    ChopMoun  
       2017-05-06 09:51:40 +08:00
    你也说了改的是前端。只是比较繁琐罢了,时间上的问题,再说客户是按照时间付费,这有什么好解脱的?
    NonClockworkChen
        8
    NonClockworkChen  
       2017-05-06 09:52:42 +08:00
    就是说原作者是一位 php 的上古大拿吗- -
    em70
        9
    em70  
       2017-05-06 09:53:58 +08:00 via Android
    多花时间多收钱,有什么不好
    tabris17
        10
    tabris17  
       2017-05-06 09:54:05 +08:00
    你现在需要产品说明书
    laoyuan
        11
    laoyuan  
       2017-05-06 10:00:51 +08:00
    捂脸,我现在写的还是这样的上古代码,各种 mysql_fetch_assoc,以及 echo 出来的 JS。。
    去年想用 Laravel 重写来着,历史问题太多愣是没写下去
    laoyuan
        12
    laoyuan  
       2017-05-06 10:02:20 +08:00
    尴尬之处在于,代码没有完全重构之前,加功能还得继续上古
    Felldeadbird
        13
    Felldeadbird  
       2017-05-06 10:03:14 +08:00   1
    吐吐槽就好了,该怎样做还是要做。重构就免了,因为你的收入根本不足够你去重构如此项目。
    如果要改善此项目。1:在新功能中引入新架构开发,同时要确保原有的函数、方法可以调用。2.修改旧功能,看开发时间而定,如果很耗时较长,直接在原架构下开发。反之参考第一点。
    对于老旧项目,除非老板肯定重构,否则不要一步到位。这需要新旧架构通存过渡期。
    reus
        14
    reus  
       2017-05-06 10:04:08 +08:00
    无能。
    dsg001
        15
    dsg001  
       2017-05-06 10:12:13 +08:00
    画重点:需求很简单,对方也要求低,客户比较好,按时间付费;

    那就慢慢来呗,客户又没有要求重构
    danhahaha
        16
    danhahaha  
    OP
       2017-05-06 10:14:29 +08:00
    @reus 再加个为力不是更好
    danhahaha
        17
    danhahaha  
    OP
       2017-05-06 10:17:04 +08:00
    @dsg001 恩,话是这么说,不过就成了体力劳动了,真正得码农了
    iRiven
        18
    iRiven  
       2017-05-06 10:18:45 +08:00 via Android
    原生就不好吗
    mathgl
        19
    mathgl  
       2017-05-06 10:21:43 +08:00
    @gyorou 高手哪。
    zjqzxc
        20
    zjqzxc  
       2017-05-06 10:24:37 +08:00
    不要重构,重构坑更多

    慢慢改吧。。没有太好的方法
    jiehuangwei
        21
    jiehuangwei  
       2017-05-06 10:34:13 +08:00
    缝缝补补又一年
    yumijie
        22
    yumijie  
       2017-05-06 10:37:52 +08:00
    @jiehuangwei 赞同
    dsg001
        23
    dsg001  
       2017-05-06 10:38:04 +08:00   1
    @danhahaha 对方代码应该是经过漫长时间考验,比较稳定可靠的,如果重构能保证提高效率而且没坑吗?如果只是因为洁癖就去重构客户代码,这才是坑吧
    Mutoo
        24
    Mutoo  
       2017-05-06 10:41:29 +08:00
    不要重构,要重写。
    QQ2171775959
        25
    QQ2171775959  
       2017-05-06 10:51:18 +08:00
    希望您能静下心来,好好思考一下,也许就会发现并没有那么难的,抗过了这一波后,又是一个英雄好汉。
    wangjie
        26
    wangjie  
       2017-05-06 10:58:02 +08:00
    我接手过最烂的代码还不过是一份基于 tp3 的代码
    sagaxu
        27
    sagaxu  
       2017-05-06 11:01:38 +08:00
    @gouchaoer

    封装得当的代码,一个功能可能调用了 10 个业务方法,理想的情况下只要看一下十几个名字就了解个大概了,最差情况是名字不好,得一层层的人肉过一遍代码。

    封装不好的代码,一个功能几千行代码全放一起,call stack 是比较浅,但是要读更多的细节代码,还很容易陷入复制粘贴的泥淖,到处长得相似却又并不完全一样的代码是很头疼的。

    封装可以把实现细节和意图隔离起来,维护代码的时候,我们更多关注意图之间的串联,而非实现细节。
    danhahaha
        28
    danhahaha  
    OP
       2017-05-06 11:04:37 +08:00
    @wangjie tp3 起码还前后分离了
    ferran
        29
    ferran  
       2017-05-06 11:07:05 +08:00
    从接盘到跑路
    hzw94
        30
    hzw94  
       2017-05-06 11:09:15 +08:00
    无解的代码
    hellpeng
        31
    hellpeng  
       2017-05-06 11:15:46 +08:00
    删除工程, 新建工程
    wolfan
        32
    wolfan  
       2017-05-06 11:23:30 +08:00
    新建项目申请项目资金。
    fuxkcsdn
        33
    fuxkcsdn  
       2017-05-06 11:37:23 +08:00 via iPhone
    都知道是上古项目了,还能要求啥?
    之前公司里还有个项目是 PHP 4 时代写的呢。
    这种上古项目修改起前端感觉反而更方便,基本上一个页面就是一个 php 文件,URL 就已经指名了
    个人最无法接受的是代码格式混乱,看代码时总有格式化代码的冲动(一格式化起来就没完没了了)
    visonme
        34
    visonme  
       2017-05-06 11:40:57 +08:00
    在原生 php 工程基础上用框架不可取,最近的一个项目就是类似情况,后面果断放弃了,只能坚持原生或者框架重写。

    原生 php 工程如果代码结构好点,其实修改起来还是很容易的。
    PythonAnswer
        35
    PythonAnswer  
       2017-05-06 11:44:37 +08:00
    提取表格,生成 api。
    isbase
        36
    isbase  
    PRO
       2017-05-06 12:24:40 +08:00 via Android
    这次放弃了,以后还会放弃的
    designer
        37
    designer  
       2017-05-06 12:31:20 +08:00
    突然钦佩上了上古大拿
    Meimei
        38
    Meimei  
       2017-05-06 12:49:47 +08:00
    我只有说钦佩,继续努力干
    shijingshijing
        39
    shijingshijing  
       2017-05-06 13:07:38 +08:00
    @sagaxu @danhahaha

    算好的了,起码认真看看还能看懂。楼主,你见过拼音首字母命名的表名和字段名么? ZYXX, KHXX, DDXX 你猜猜是啥意思? 你见过中英文混合命名的变量名么? oneTimeDiscount, noDiscount, zhongShengDiscount

    所以说,楼主你还是加油干吧,你吃的这堆屎还算香的呢。呵呵
    liuxu
        40
    liuxu  
       2017-05-06 13:11:14 +08:00
    我公司老网站也是你说的那个样子,然后我们自己定义 mvsc 层,新需求都用 mvsc 写
    拿请求返回数据由 action 操作,显示页面用 view,view 层用 smarty 做,view 里面的 ajax 接口都是 action,action 和 view 调用逻辑处理 service 层,service 遇到数据库,文件读写调用 model
    还需要自己写一个公共 model 类,封装原生 mysql,然后每个模块的 model 引用这个公共 model,操作会很轻松

    严格按照这个来的话,有很多代码可以直接复制粘贴修改就行,很节约时间
    jarlyyn
        41
    jarlyyn  
       2017-05-06 13:28:03 +08:00   1
    没有说明书的话。

    这种代码比基于任何一个框架的都好改。

    楼主属于锤子用多了,觉得什么都应该是钉子……
    8355
        42
    8355  
       2017-05-06 13:34:50 +08:00
    个人建议你还是把你项目情况跟客户解释清楚 问问客户是否需要重构 如果需要的话你就完全帮忙重写一个项目 直接抛弃掉这个 如果原来的数据库建的还能用就继续用 如果不行就重新洗一下数据开始你的重构吧..
    如果不需要你就继续用传统开发直接写就好了啊.
    billlee
        43
    billlee  
       2017-05-06 13:35:07 +08:00   1
    你这还好啊,更可怕的是自己造了个没文档的框架。。
    run2
        44
    run2  
       2017-05-06 13:53:00 +08:00
    感觉至少要把 view 整合下 不想上 framework 的话直接上 twig 吧( template 引擎) https://twig.sensiolabs.org/
    paullee
        45
    paullee  
       2017-05-06 13:56:46 +08:00 via iPhone
    h
    harker
        46
    harker  
       2017-05-06 14:13:51 +08:00
    建议在基础上慢慢改吧,只是原生代码生疏了,看熟老古董就好了
    Z1076
        47
    Z1076  
       2017-05-06 14:56:52 +08:00
    我现在就接手了一个这样的项目做二次开发,一个 php 文件,1w8 行,就问你怕不怕。
    Z1076
        48
    Z1076  
       2017-05-06 14:58:29 +08:00
    用 phpstorm 修改这个文件,打开的时候笔电的风扇都跟发动机一样响。真是日了狗...
    loserwn
        49
    loserwn  
       2017-05-06 15:00:39 +08:00
    说「上古」我还以为是 PHP3 PHP4 呢。。。中老年程序员(逃
    aksoft
        50
    aksoft  
       2017-05-06 15:15:41 +08:00
    一分钱一分货。。一步一步调试吧。
    我也这么干过,至于后来入坑者。。。
    shmilypeter
        51
    shmilypeter  
       2017-05-06 15:35:48 +08:00
    还好吧,你没见过项目中大量用了泛型,但是到部署的时候才发现,人家服务器 jdk 还是 1.4 的,那个蛋疼啊。
    Mine
        52
    Mine  
       2017-05-06 16:39:45 +08:00
    好好做,做完你就成大牛了。
    xifangczy
        53
    xifangczy  
       2017-05-06 16:41:29 +08:00
    用框架习惯了而已,按时间算已经很不错了,还在抱怨啥。去改吧。。
    fhefh
        54
    fhefh  
       2017-05-06 17:21:27 +08:00
    大量的积分

    我想成了数学的微积分 看了半天
    fhefh
        55
    fhefh  
       2017-05-06 17:23:45 +08:00
    @shijingshijing #39

    见过一次 想了半天 后来我问人家 这啥意思 人家说 抱歉 忘记把字段字典 EXCEL 发你了

    我。。。
    konakona
        56
    konakona  
       2017-05-06 20:21:00 +08:00
    @danhahaha echo+table 是最痛苦的...
    xyjtou
        57
    xyjtou  
       2017-05-06 20:54:54 +08:00 via Android
    那位上古程序员难道已经仙逝?最好的办法,如果上古人士还健在!请一天的咨询费用,让人家来给你理理,回忆一下当年的设计思路,否则猜他人的思路是非常痛苦的事情,消耗的时间也更多。
    Lonely
        58
    Lonely  
       2017-05-06 21:56:38 +08:00
    真是矫情
    murmur
        59
    murmur  
       217-05-06 21:57:44 +08:00
    ecshop 还不是这个路子 连 oom 都没有一水的 sql 拼接
    当年愣是魔改了 N 多新功能上去
    pengbo37877
        60
    pengbo37877  
       2017-05-06 22:19:42 +08:00
    只要数据库在,重新写
    yankbytes
        61
    yankbytes  
       2017-05-07 01:49:42 +08:00
    没怎么接触过前端的知识但是感觉可以先把逻辑分离?管数据的管数据,管 UI 的管 UI。不知道 js 在项目里主要是做啥,如果是实时动态显示的话考虑下转 angular 或者 react 框架? php 部分用来和数据库交互的部分就先别动啦~遇上重构的项目真的觉得心累。。。
    GoBeyond
        62
    GoBeyond  
       2017-05-07 06:51:36 +08:00 via Android
    如果只是想保稳就不要动这种东西
    johnny23
        63
    johnny23  
       2017-05-07 08:55:52 +08:00 via iPhone
    就是说 删除一个注释系统就跑不起来系列嘛 哈哈哈哈哈
    danhahaha
        64
    danhahaha  
    OP
       2017-05-07 09:27:59 +08:00
    @johnny23 问题是他妹的连注释都没有啊
    danhahaha
        65
    danhahaha  
    OP
       2017-05-07 09:28:23 +08:00
    代码还全部左对齐,感觉是故意的
    580a388da131
        66
    580a388da131  
       2017-05-07 11:53:10 +08:00
    我的初学项目就是一大堆的 echo 定界符
    huobazi
        67
    huobazi  
       2017-05-07 20:08:06 +08:00 via iPhone
    怕啥 我还维护过扩展名 php3 的……
    ychongsaytc
        68
    ychongsaytc  
       2017-05-08 01:11:30 +08:00 via iPhone
    浴火,重生。
    msg7086
        69
    msg7086  
       2017-05-08 02:50:18 +08:00
    不要多想,直接开工干就是了,读代码写代码,反正按时间收费,你慌什么。
    gowk
        70
    gowk  
       2017-05-08 11:36:40 +08:00
    rewrite it
    allgy
        71
    allgy  
       2017-05-08 14:59:44 +08:00
    @gyorou 坑定是 C 转过来的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5359 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 08:44 PVG 16:44 LAX 00:44 JFK 03:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86