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

最近维护一份前人写的 PHP 代码,看的人头疼。

  •  
  •   jojojo · 2018-05-20 17:53:13 +08:00 · 7583 次点击
    这是一个创建于 2379 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个查询系统,用户查询和后台管理分两个系统,一个用 lavarel,一个用 ci 框架,当然,这些都不重要,给大家看一下大神的代码:

            $ip = real_ip();  //没有用到
    	if (isset($_COOKIE['P0001'])) {   //p0001 是什么鬼?
    		$arr["status"] = 1;
    		$arr["dBTypeList"] = array( 
                          "0" => array("type"=> "0","databaseNtro" => "MySQL"),  //databaseNtro 是什么
    		      "1" => array("type"=> "1","databaseNtro" => "Redis"),
    		);
    		echo json_encode($arr);
    		} else {
    			echo json_encode(array("status"=>0));  //前后返回 json 格式不一样
    		}
    

    当然,这些都不重要,重要的是

    为什么要把这个项目给我做?

    59 条回复    2018-05-23 09:56:51 +08:00
    conwey
        1
    conwey  
       2018-05-20 18:16:19 +08:00 via Android
    哈哈,你现在写的后面来的人也会这样说。
    phpcxy
        2
    phpcxy  
       2018-05-20 18:18:19 +08:00 via Android
    因为要服从上级安排
    Seth8277
        3
    Seth8277  
       2018-05-20 18:40:28 +08:00 via Android
    看着你直接复制过来的代码也是头疼
    FrankAdler
        4
    FrankAdler  
       2018-05-20 19:02:44 +08:00
    这点小问题还好意思说, 你维护过十几年的 php 项目吗, 一个文件几万行见过吗, 一个方法上千行见过吗
    des
        5
    des  
       2018-05-20 19:10:48 +08:00 via Android
    不知道楼主见过,"保证执行顺序用 settimeout,保存操作放在 getxxx 里面" 这样的代码没有
    jojojo
        6
    jojojo  
    OP
       2018-05-20 19:42:23 +08:00
    @FrankAdler 一个方法上千行还真见过
    @conwey 至少我不会不写 readme,也不会把各种路径全部写死在代码里,也不会写一堆看不懂意思的变量
    @des 这种比较吊的就没见过了
    allgy
        7
    allgy  
       2018-05-20 19:44:48 +08:00
    这就是我转 python 的原因
    fhefh
        8
    fhefh  
       2018-05-20 20:13:14 +08:00
    当初跟楼主一样
    现已麻木 只管写 业务能跑即可 没人会看你的代码的
    除非你有时间重构~
    zjsxwc
        9
    zjsxwc  
       2018-05-20 20:32:52 +08:00 via Android
    差不多
    Nick66
        10
    Nick66  
       2018-05-20 20:33:38 +08:00
    哈哈
    forestyuan
        11
    forestyuan  
       2018-05-20 20:37:26 +08:00
    维护别人的代码肯定好多坑啊
    h1367500190
        12
    h1367500190  
       2018-05-20 21:04:32 +08:00
    @des 这个牛逼


    @jojojo 以后你会见过更坑的
    wly19960911
        13
    wly19960911  
       2018-05-20 21:12:09 +08:00 via Android
    @des settimeout 我用过,为了保证是最后触发,问题我也很无奈啊,前端 ui 框架没有分离,需要实现的功能是动态添加,修改了 Dom 结构导致事件不能直接绑定,加上 ui 框架初始化没有接口,只能用 settimeout 去最后执行事件绑定。
    coolesting
        14
    coolesting  
       2018-05-20 21:28:42 +08:00
    我维护过一个项目,不用 <a> 来跳转页面的, 而是无限的 js 弹出窗口(新的页面)。
    fulvaz
        15
    fulvaz  
       2018-05-20 21:37:42 +08:00
    正在维护的 ts 项目.

    前人一个函数可以 return 出多种不同的类型, 一个函数根据传入参数的不同可以做很多事情

    全是 initValue 和 pickItem, 至于返回了什么只有他知道.

    开发环境崩了

    后端 api 文档不更新了

    不遵守 tslint

    完全把 ts 当 js 写了, 对象没任何 type 定义

    把 redux 的 store 当 obj 用, 如 store.a = xxx

    全是复制粘贴.

    诡异的实现方法

    全世界在催我

    --------------------------

    TM 这么恶劣的条件我竟然一个个猜到了这坨东西写了啥!

    然后一个个重构命名!
    jojojo
        16
    jojojo  
    OP
       2018-05-20 21:42:46 +08:00
    @allgy 跟语言没关系吧,更多的是一个人职业素养的问题,当然,可能我是运维开发的关系吧,我遇见的 php 只有几个水平不错的,大部分都很垃圾
    @forestyuan 维护这种代码很容易影响心情
    fulvaz
        17
    fulvaz  
       2018-05-20 21:44:05 +08:00
    @des 来个刺激的

    实现这么一个需求

    父组件点击打开按钮时, 子组件会执行对应的动作, 然后子组件动作执行结束后, 父组件再执行其他动作.

    然后出现了这样的写法

    将父组件的 open 属性传给子组件作为 input

    然后父组件点了打开, 就会出现这么一个执行顺序的东西...

    父.open = true -> 子的 onChange 生命周期函数判断自己的 open 为 true, 做自己的事情 -> 父的定时器 100 触发, 执行自己的动作.

    这还是个用了全局状态的项目.
    iRiven
        18
    iRiven  
       2018-05-20 22:16:31 +08:00 via iPad
    这代码真心没啥好吐槽的
    mahone3297
        19
    mahone3297  
       2018-05-20 22:31:47 +08:00
    @fulvaz 》 TM 这么恶劣的条件我竟然一个个猜到了这坨东西写了啥!
    看来写的还可以。。。别人还是看得懂的,哈哈哈
    Linxing
        20
    Linxing  
       2018-05-20 22:36:08 +08:00 via iPhone
    逼着你重构一个
    Actrace
        21
    Actrace  
       2018-05-20 22:43:41 +08:00
    其实我总结一下各位的意见,就是他写的代码我,,,
    不想读不想读不想读,我不想知道他到底写的是什么,他算老几,我为什么要去理解他的代码,

    大概应该是这样。
    spark20
        22
    spark20  
       2018-05-20 22:48:48 +08:00 via Android
    我觉得只要把变量的意思,算法,写清楚就好了吧,其他的还好说
    GGGG430
        23
    GGGG430  
       2018-05-21 00:44:09 +08:00 via iPhone   ❤️ 1
    else 看着难受
    xjroot
        24
    xjroot  
       2018-05-21 03:37:41 +08:00
    直接删除,自己重写吧。 就单纯 $_COOKIE['P0001'] ,就可以搞点事情了, 返回 json 这个判断写的根本无法用。
    karlxu
        25
    karlxu  
       2018-05-21 08:58:36 +08:00
    当时我也是,维护了几个月,放弃了,用 Django 重写了
    nosay
        26
    nosay  
       2018-05-21 09:09:02 +08:00   ❤️ 1
    v 站的人似乎不怎么接二次开发..
    反正我接很多二次开发
    这代码还有什么好吐槽的?太年轻了!
    重构? v 站的很多人好像时间很多的样子...
    不说了,继续搬砖了
    yangqi
        27
    yangqi  
       2018-05-21 09:13:34 +08:00   ❤️ 1
    这么简单的代码有啥好吐槽的,看懂大概意思就行了,你揪着细节不放,应该先问一下你自己有没有同样的问题。
    chairuosen
        28
    chairuosen  
       2018-05-21 09:35:52 +08:00
    每一个王子最后都会变成恶龙
    zarte
        29
    zarte  
       2018-05-21 09:45:54 +08:00
    第一个不用了懒得去掉,第二个想不到英文,第三个英文太长缩写不知道该怎么缩,第四个返回格式是一样的。
    changepll
        30
    changepll  
       2018-05-21 09:51:06 +08:00
    质量这么高的代码,楼主有什么好抱怨的
    azh7138m
        31
    azh7138m  
       2018-05-21 09:55:25 +08:00
    @wly19960911 事件委托了解一下?
    fcten
        32
    fcten  
       2018-05-21 10:00:30 +08:00
    这 json 格式哪里不一致了,不是有个通用的 status 属性用来判断吗
    wly19960911
        33
    wly19960911  
       2018-05-21 10:05:29 +08:00 via Android
    @azh7138m 恩,想了下的确我错了,不过这个委托都快到根节点了。
    RorschachZZZ
        34
    RorschachZZZ  
       2018-05-21 10:11:35 +08:00
    现在我维护古董代码。只要变量和方法命名规范点、再稍微有点业务解释。感觉已经非常满足了。。
    ryuzaki113
        35
    ryuzaki113  
       2018-05-21 10:12:52 +08:00
    不知道楼主有没有见过,“防止保存失败,for 循环保存一百次”
    linxl
        36
    linxl  
       2018-05-21 10:22:40 +08:00
    命名确实看不懂干啥的, 坑啊
    broadliyn
        37
    broadliyn  
       2018-05-21 10:30:15 +08:00   ❤️ 3
    有能力的人早就在开始在理旧代码思路和做重构了。没能力的人跟个怨妇一样贴一通代码到坛子里来获取认同感。

    能把代码看明白整清楚也是一个能力明白吗?你自己写的代码,后边接手的人一样会喷你写的辣鸡。

    很多时候你不是当事人,没有代入当时的需求场景,你根本不会知道为什么他当时会这么写。换成是你自己,估计也不会写的更好。

    只要不是因为能力水平差、思路逻辑混乱写出来的代码,一般都不会是烂代码
    nowgoo
        38
    nowgoo  
       2018-05-21 10:42:21 +08:00
    isset($_COOKIE['P0001']) 可能是一个隐藏的调试开关。
    Felldeadbird
        39
    Felldeadbird  
       2018-05-21 11:02:34 +08:00
    接受现实是每个程序员成长必经之路。
    lj3lj3
        40
    lj3lj3  
       2018-05-21 11:09:06 +08:00
    这样的代码风格已经不错了 看我接手的
    ```
    $username = htmlspecialchars($_SESSION['adminname'],ENT_COMPAT ,'GB2312');//用户
    $addtime = time();
    if($addcode!=$originator){
    exit("<script type='text/javascript'> alert('请不要刷新本页面或重复提交表单!');location.href='".$sourceurl."';</script>");
    }else{
    unset($_SESSION["addcode"]);
    if($id!="" && $name!=""){
    $que=$db->query("select * from ".$cfg_dbpre."news where id=$id");
    $num=$db -> num_rows($que);
    ```
    NxiJSiOS
        41
    NxiJSiOS  
       2018-05-21 11:10:44 +08:00
    正常
    t2doo
        42
    t2doo  
       2018-05-21 11:42:05 +08:00
    这就叫你头疼啦,那你是没看过我写的 PHP 啰,哈哈哈
    jadec0der
        43
    jadec0der  
       2018-05-21 11:44:40 +08:00
    贵司的缩进是八个空格?
    luoway
        44
    luoway  
       2018-05-21 12:17:40 +08:00
    @Actrace #21
    还有一种:
    啥时候有时间重构代码,真 TM 想把代码改成我的
    azh7138m
        45
    azh7138m  
       2018-05-21 12:19:28 +08:00
    @wly19960911 react 都在 document 上处理事件,根节点就根节点呗
    Norie
        46
    Norie  
       2018-05-21 13:12:57 +08:00 via iPhone
    @broadliyn 就连自己写的过段时间回去看都不知道为什么会这么写!
    annielong
        47
    annielong  
       2018-05-21 15:59:13 +08:00
    感觉写的没什么大问题,一看就知道这个是干嘛的了,
    foursking
        48
    foursking  
       2018-05-21 16:06:36 +08:00
    就这心态,离职吧
    joeke
        49
    joeke  
       2018-05-21 16:13:25 +08:00
    这个只是意思上的不理解而已,也没啥好吐槽的,实在不行就自己重构呗
    mchong
        50
    mchong  
       2018-05-21 16:22:50 +08:00
    @lj3lj3
    我十几年前也是这么写的,而且代码现在还在用,我还在维护.....
    qcind
        51
    qcind  
       2018-05-21 16:40:45 +08:00
    祖传的代码,要好好守着。
    realpg
        52
    realpg  
       2018-05-21 16:56:25 +08:00
    我觉得楼主贴这些代码没啥太大的问题。
    肯定是有点难懂需要结合其他代码(如果没有文档),但是绝对不算啥大坑
    lepig
        53
    lepig  
       2018-05-21 17:05:37 +08:00
    楼主 刚开始工作吗
    konakona
        54
    konakona  
       2018-05-21 17:35:28 +08:00
    哈哈,不写注释党。
    Justin13
        55
    Justin13  
       2018-05-21 18:44:16 +08:00 via Android
    js,一个 8000 行的函数见过没。
    liuxu
        56
    liuxu  
       2018-05-21 18:55:32 +08:00
    清晰易懂啊
    paranoiagu
        57
    paranoiagu  
       2018-05-21 18:56:53 +08:00 via Android
    人肉混淆听说过吗?
    cncqw
        58
    cncqw  
       2018-05-22 09:48:09 +08:00
    @allgy 这跟转 python 有什么关系,python 照样能写出奇葩代码,写个 python 还写出优越感了?
    lj3lj3
        59
    lj3lj3  
       2018-05-23 09:56:51 +08:00
    @mchong 主要是现在那个货还在这么写 给客户做的网站全都这 还不给时间重构 耳边响起了糙猛快优美的旋律
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2451 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.