• 请不要在回答技术问题时复制粘贴 AI 生成的内容
danhahaha
V2EX  ›  程序员

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

  •  
  •   danhahaha · May 6, 2017 · 10699 views
    This topic created in 3307 days ago, the information mentioned may be changed or developed.

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

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

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

    感觉是另外一种语言。

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

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

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

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

    那就慢慢来呗,客户又没有要求重构
    danhahaha
        16
    danhahaha  
    OP
       May 6, 2017
    @reus 再加个为力不是更好
    danhahaha
        17
    danhahaha  
    OP
       May 6, 2017
    @dsg001 恩,话是这么说,不过就成了体力劳动了,真正得码农了
    Erskine
        18
    Erskine  
       May 6, 2017 via Android
    原生就不好吗
    mathgl
        19
    mathgl  
       May 6, 2017
    @gyorou 高手哪。
    zjqzxc
        20
    zjqzxc  
       May 6, 2017
    不要重构,重构坑更多

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

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

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

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

    原生 php 工程如果代码结构好点,其实修改起来还是很容易的。
    PythonAnswer
        35
    PythonAnswer  
       May 6, 2017
    提取表格,生成 api。
    isbase
        36
    isbase  
    PRO
       May 6, 2017 via Android
    这次放弃了,以后还会放弃的
    designer
        37
    designer  
       May 6, 2017
    突然钦佩上了上古大拿
    Meimei
        38
    Meimei  
       May 6, 2017
    我只有说钦佩,继续努力干
    shijingshijing
        39
    shijingshijing  
       May 6, 2017
    @sagaxu @danhahaha

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

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

    严格按照这个来的话,有很多代码可以直接复制粘贴修改就行,很节约时间
    jarlyyn
        41
    jarlyyn  
       May 6, 2017   ❤️ 1
    没有说明书的话。

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

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

    我想成了数学的微积分 看了半天 囧
    fhefh
        55
    fhefh  
       May 6, 2017
    @shijingshijing #39

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

    我。。。
    konakona
        56
    konakona  
       May 6, 2017
    @danhahaha echo+table 是最痛苦的...
    xyjtou
        57
    xyjtou  
       May 6, 2017 via Android
    那位上古程序员难道已经仙逝?最好的办法,如果上古人士还健在!请一天的咨询费用,让人家来给你理理,回忆一下当年的设计思路,否则猜他人的思路是非常痛苦的事情,消耗的时间也更多。
    Lonely
        58
    Lonely  
       May 6, 2017
    真是矫情
    murmur
        59
    murmur  
       May 6, 2017
    ecshop 还不是这个路子 连 oom 都没有一水的 sql 拼接
    当年愣是魔改了 N 多新功能上去
    pengbo37877
        60
    pengbo37877  
       May 6, 2017
    只要数据库在,重新写
    yankbytes
        61
    yankbytes  
       May 7, 2017
    没怎么接触过前端的知识但是感觉可以先把逻辑分离?管数据的管数据,管 UI 的管 UI。不知道 js 在项目里主要是做啥,如果是实时动态显示的话考虑下转 angular 或者 react 框架? php 部分用来和数据库交互的部分就先别动啦~遇上重构的项目真的觉得心累。。。
    GoBeyond
        62
    GoBeyond  
       May 7, 2017 via Android
    如果只是想保稳就不要动这种东西
    johnny23
        63
    johnny23  
       May 7, 2017 via iPhone
    就是说 删除一个注释系统就跑不起来系列嘛 哈哈哈哈哈
    danhahaha
        64
    danhahaha  
    OP
       May 7, 2017
    @johnny23 问题是他妹的连注释都没有啊
    danhahaha
        65
    danhahaha  
    OP
       May 7, 2017
    代码还全部左对齐,感觉是故意的
    580a388da131
        66
    580a388da131  
       May 7, 2017
    我的初学项目就是一大堆的 echo 定界符
    huobazi
        67
    huobazi  
       May 7, 2017 via iPhone
    怕啥 我还维护过扩展名 php3 的……
    ychongsaytc
        68
    ychongsaytc  
       May 8, 2017 via iPhone
    浴火,重生。
    msg7086
        69
    msg7086  
       May 8, 2017
    不要多想,直接开工干就是了,读代码写代码,反正按时间收费,你慌什么。
    gowk
        70
    gowk  
       May 8, 2017
    rewrite it
    allgy
        71
    allgy  
       May 8, 2017
    @gyorou 坑定是 C 转过来的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2790 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 198ms · UTC 15:29 · PVG 23:29 · LAX 08:29 · JFK 11:29
    ♥ Do have faith in what you're doing.