发一个认为自己代码很差很差的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Annual
V2EX    PHP

发一个认为自己代码很差很差的

  •  
  •   Annual 2018-01-12 01:30:36 +08:00 12628 次点击
    这是一个创建于 2894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT,主题 https://mi90.com/20180112012844.png
    是不是乱的无可救药?

    第 1 条附言    2018-01-13 01:23:26 +08:00
    先声明一下,程序并非我开发。我只是下载过来进行修改,应该可以称作二次开发吧??

    还有,LZ 本身也是刚入门 PHP,还有很多不了解的地方,目前还没有了解面向对象开发。所以各位推荐框架的我也是用不上。

    我自己定义学 PHP 开发的过程应该就是先去尝试修改别人的程序,弄懂原理再去自己单独开发一套程序。不然你让我怎么入门,甚至是先干什么?
    88 条回复    2018-01-23 19:10:29 +08:00
    xfspace
        1
    xfspace  
       2018-01-12 01:35:06 +08:00 via Android
    能用就行 :doge:
    icebay
        2
    icebay  
       2018-01-12 01:57:16 +08:00   1
    看的我想用 phpstorm 的 ctrl+alt+L 格式化一下
    WuwuGin
        3
    WuwuGin  
       2018-01-12 02:08:42 +08:00
    反正看上去挺乱的
    akira
        4
    akira  
       2018-01-12 02:13:32 +08:00
    连续赋值那一段没对齐 看着好难受
    zhizunzz
        5
    zhizunzz  
       2018-01-12 02:14:18 +08:00 via Android
    表示淡定,比我厂还是要整洁多了
    des
        6
    des  
       2018-01-12 02:41:49 +08:00 via Android
    好想吐槽…… 算了
    emmmm ……
    现在不都是用框架的么
    Annual
        7
    Annual  
    OP
       2018-01-12 04:31:16 +08:00 via Android
    @des 入门 php 都是从改程序入门的 233,框架还看不懂
    yorTX9t
        8
    yorTX9t  
       2018-01-12 04:39:25 +08:00
    你们拍黄片的都会写这么长的一行代码么?我是指最后一行
    Annual
        9
    Annual  
    OP
       2018-01-12 04:40:39 +08:00 via Android
    @yorTX9t 怎么顺怎么来,再说,我只会 echo
    iRiven
        10
    iRiven  
       2018-01-12 08:00:51 +08:00 via Android
    除了 if 后面没加大括号 其他很舒服
    shiji
        11
    shiji  
       2018-01-12 08:14:06 +08:00
    @yorTX9t 我 SQL 一般喜欢美化一下再往里面塞。 否则根本不可读啊
    shiji
        12
    shiji  
       2018-01-12 08:15:35 +08:00
    话说最后一行那个双引号。。还需要用 . 拼接么。。。。 变量直接放里面就信了吧,可能引起歧义的话套个花括号
    weilongs
        13
    weilongs  
       2018-01-12 08:18:32 +08:00
    功能实现,谁看你代码。
    defuck
        14
    defuck  
       2018-01-12 08:23:16 +08:00 via Android
    那是因为你没看 discuz 的代码
    meanmachine
        15
    meanmachine  
       2018-01-12 08:24:55 +08:00 via Android
    哪天改代码时候 intval 被删了 emmmmm
    pixes4world
        16
    pixes4world  
       2018-01-12 08:48:34 +08:00
    至少逻辑结构还是比较清晰的,LGTM
    king2014
        17
    king2014  
       2018-01-12 08:54:12 +08:00
    楼主写的?
    kran
        18
    kran  
       2018-01-12 08:54:44 +08:00
    出血者。
    HuHui
        19
    HuHui  
       2018-01-12 08:59:42 +08:00
    这在我见过的代码中能算优秀了
    free9fw
        20
    free9fw  
       2018-01-12 09:07:17 +08:00
    变量可以精简一下,用个字典就行了
    oaix
        21
    oaix  
       2018-01-12 09:07:45 +08:00
    不觉得太乱, 挺直白的.
    格式有点乱, 行内少了很多空格(比如`=`左右, if 后面 等等), 不是大问题, 用 IDE 的格式化功能格式化一下.
    另外 if 只有一个子语句时, 也建议加上大括号.
    sql 那段有点, 可能有注入的风险.
    另外行间不同功能逻辑其实用空行隔开了, 可以用 IDE 提供的重构功能, 提取成一个函数.
    q409195961
        22
    q409195961  
       2018-01-12 09:10:06 +08:00   2
    金额是不是可以传 0.0091
    whx20202
        23
    whx20202  
       2018-01-12 09:22:00 +08:00
    突然觉得 python 真特么好,看代码就跟看文章一样
    flyshu
        24
    flyshu  
       2018-01-12 09:22:59 +08:00
    挺好的 原生不都这样写吗
    yichinzhu
        25
    yichinzhu  
       2018-01-12 09:27:51 +08:00 via Android
    一眼就看到了 SQL 注入,,,
    DavidNineRoc
        26
    DavidNineRoc  
       2018-01-12 09:41:08 +08:00

    这样子优雅很多 (逃
    建议使用 StyleCI 格式化一下代码,有多种标准格式可以选
    v2xe2v
        27
    v2xe2v  
       2018-01-12 09:42:43 +08:00
    没格式化,难受
    xhinliang
        28
    xhinliang  
       2018-01-12 09:45:56 +08:00
    前鹅肠员工路过。
    在鹅肠见过比这恶心一百倍的代码。
    ZXCDFGTYU
        29
    ZXCDFGTYU  
       2018-01-12 10:17:10 +08:00
    这代码真的是能写成这样也是一种奇迹,哪怕用个 tp 也不至于写成这样啊。。
    13036101641
        30
    13036101641  
       2018-01-12 10:18:24 +08:00
    一般都有代码规范的插件或者工具吧
    carlclone
        31
    carlclone  
       2018-01-12 10:22:58 +08:00
    远古 PHPer 面向过程面条式代码
    lbp0200
        32
    lbp0200  
       2018-01-12 10:36:52 +08:00
    @yichinzhu +1 SQL 注入是原罪,初级水平。
    yujieyu7
        33
    yujieyu7  
       2018-01-12 10:39:37 +08:00
    在 header 函数前加错误控制符是什么鬼?
    killall
        34
    killall  
       2018-01-12 10:44:45 +08:00 via Android
    这就是传说中的面条代码…不分结构不分分层,所有的东西全都烩到一起,出现问题从头读到尾,数据结构变了得改一堆的文件…业务增长在文件里不停地打补丁,最后知道维护到整个人崩溃。
    justfindu
        35
    justfindu  
       2018-01-12 10:45:14 +08:00
    原生也就只能这样写了 格式化一下也许好看一些
    lepig
        36
    lepig  
       2018-01-12 10:45:30 +08:00
    还行 没到吐槽的地步
    b821025551b
        37
    b821025551b  
       2018-01-12 10:50:48 +08:00
    挺好的了,能看懂,格式化一下逻辑很清晰。
    bramblex
        38
    bramblex  
       2018-01-12 11:16:48 +08:00
    @killall 把整个网站写到一个 php 文件里面
    3than
        39
    3than  
       2018-01-12 11:24:28 +08:00
    @yichinzhu +1 不管程序写的怎么样 但是 sql 注入..
    hei1000
        40
    hei1000  
       2018-01-12 11:26:13 +08:00
    我不是稿 php 的不平论,但是最后那两行长度上真实毁了前面
    mingzu
        41
    mingzu  
       2018-01-12 11:29:49 +08:00
    屏幕挺宽啊...
    tongz
        42
    tongz  
       2018-01-12 11:41:39 +08:00
    看倒是能看,这样写代码维护起来得崩溃,如果我接盘你的代码。。算了我不想爆粗口
    polymerdg
        43
    polymerdg  
       2018-01-12 11:47:58 +08:00
    @3than 哪有 SQL 注入 没看见呢
    sbw
        44
    sbw  
       2018-01-12 11:49:27 +08:00
    真羡慕你们不用做国际化的
    HanSonJ
        45
    HanSonJ  
       2018-01-12 11:53:29 +08:00
    看着不爽,但还能抢救。

    嗯,我真的很严格
    popu111
        46
    popu111  
       2018-01-12 11:59:45 +08:00 via Android
    @polymerdg 最后一行,拼接 query
    jea
        47
    jea  
       2018-01-12 11:59:55 +08:00
    这个 应该是早些年的老代码了, 当时这么写肯定是有原因的
    我这里也有这种代码, 现在的新入门搞 php 的基本都不知道这种缩写的方式
    而且目前都推荐 pdo 了, 预绑定参数和类型, 比这好看多了, 还安全
    不用吐槽这个, 直接改了就是了, 老代码中还没有类库的自动加载, 多看看当时的背景, 在当时, 这个可不 low

    另外如果是现在的新人写的...直接给个内部规定的规范到脸上去
    NowTime
        48
    NowTime  
       2018-01-12 12:06:21 +08:00
    第 25 行,引入的文件好熟悉,第 61 行,这个 MySQL 操作类也好悉...
    消失的彩虹海?=.=
    580a388da131
        49
    580a388da131  
       2018-01-12 14:54:29 +08:00
    这是典型的初学者代码吧
    0ZXYDDu796nVCFxq
        50
    0ZXYDDu796nVCFxq  
       2018-01-12 15:00:55 +08:00
    真羡慕你们这些拿到 args 就敢往 sql query 里塞的大佬
    mht
        51
    mht  
       2018-01-12 15:16:22 +08:00
    面向过程的写法 不都这样吗....
    catinsides
        52
    catinsides  
       2018-01-12 15:37:10 +08:00
    居然没有人吐槽这个主题的标题
    Sypher
        53
    Sypher  
       2018-01-12 15:47:55 +08:00
    @gstqc
    真羡慕你们这些拿到 args 就敢往 sql query 里塞的大佬
    --------------------------------------------------------------------
    我 tm 被你这条回复笑哭了,哈哈哈哈哈哈嗝
    litter123
        54
    litter123  
       2018-01-12 15:57:05 +08:00
    @gstqc 唉,拿到 args 的一直瑟瑟发抖,又清又转才敢往 prepare bind 里面塞
    deadEgg
        55
    deadEgg  
       2018-01-12 16:04:07 +08:00
    看上去很难受。

    @jea 请问是什么原因让人不用三元表达式代替那段恶心的 if else 赋值?
    cxh116
        56
    cxh116  
       2018-01-12 16:22:13 +08:00 via Android
    @whx20202 当你碰到写 py 的,空格和 tab 混用时,那酸爽 。。。
    whx20202
        57
    whx20202  
       2018-01-12 16:26:16 +08:00
    @cxh116 不会吧,会报错的这样。。。。
    tagtag
        58
    tagtag  
       2018-01-12 16:46:03 +08:00
    发一个认为自己代码很差很差的人 or 发一个自己认为很差很差的代码,他代码不行,你语文不行。
    Annual
        59
    Annual  
    OP
       2018-01-12 17:13:05 +08:00
    @q409195961 应该没有人可以这么傻。。
    Annual
        60
    Annual  
    OP
       2018-01-12 17:17:19 +08:00
    @NowTime 是的,我在修改这个程序。因为看着很乱,不好下手。应该属于二次开发或者叫其他的吧。
    onion83
        61
    onion83  
       2018-01-12 17:33:04 +08:00   2
    说 SQL 注入的都没好好看代码,paraFilter、daddslashes 是什么?

    从代码的风格和逻辑上看没啥大毛病,除了嗦点,改做的非空判断也有,能看懂为什么要在 header 前加一个 @ 的人我敢说楼上没几个。

    综上述,码主至少有 >= 1 年 PHP 实际工作经验,这年头不用框架还能裸写 PHPer 没几个了,能搞清逻辑不炫技,踏踏实实搞清业务流程更是难得,在帝都工资开 15k 没问题。
    hcymk2
        62
    hcymk2  
       2018-01-12 17:34:25 +08:00
    paraFilter、daddslashes 有多大用?
    hcymk2
        63
    hcymk2  
       2018-01-12 17:36:45 +08:00
    这个只能说是有些年代的代码了。
    还有直接把错误提示写死。
    ioven
        64
    ioven  
       2018-01-12 17:55:24 +08:00
    几年前的代码风格,和帝国 cms 类似
    pein
        65
    pein  
       2018-01-12 17:56:06 +08:00
    还可以了,格式化一下会好很多,你是没见过乱的代码,敢不敢把 wordpress 源码打开看看?
    chairuosen
        66
    chairuosen  
       2018-01-12 18:02:39 +08:00
    @onion83 前面 echo 了后再写 header 会报 header already sent?
    checgg
        67
    checgg  
       2018-01-12 18:02:54 +08:00
    我曹。又来黑 PHP
    nosay
        68
    nosay  
       2018-01-12 18:17:57 +08:00
    这代码看着好熟悉,莫名的亲切感。并不感觉有什么问题。年代久远点的代码不都长这样?看到 require 和 @你们心里没点 B 数?
    3IOhG7M0knRu5UlC
        69
    3IOhG7M0knRu5UlC  
       2018-01-12 18:58:44 +08:00 via Android
    这个订单号重复了怎么办
    UnknownR
        70
    UnknownR  
       2018-01-12 19:25:35 +08:00
    和我们新人写的脚本差不多。。
    sensui7
        71
    sensui7  
       2018-01-12 19:47:42 +08:00
    32 行有函数式的影子, 这个不乱, 只是没经过重构而已.
    Annual
        72
    Annual  
    OP
       2018-01-12 21:00:42 +08:00
    @GooMS 不是大站点,所以不进行去重吧。
    sodowe666
        73
    sodowe666  
       2018-01-12 21:13:13 +08:00
    突然发现 Yii2 真美妙
    KgM4gLtF0shViDH3
        74
    KgM4gLtF0shViDH3  
       2018-01-12 21:41:08 +08:00 via Android
    没有过滤?
    changwei
        75
    changwei  
       2018-01-12 21:56:50 +08:00
    没有用框架都是这样,很乱很乱,很多重复冗余的代码,我之前在 QQ 群里面接过几个类似的改代码的活儿,吃力不讨好,有看懂这些代码的时间我都用框架给他重构一个了。

    但是我也看到了几个亮点,比如 SQL 语句关键词大写,这个可以让 IDE 和编辑器很方便的高亮以及自动查错,还有就是双引号拼接会用大括号将变量包含起来,可以有效防止变量粘连(用大括号强行分离,防止变量名和后面的字符串粘连导致出莫名其妙的 BUG ),这两点我看很多用框架写 php 写了很久的人都没有做到。
    loveyu
        76
    loveyu  
       2018-01-12 22:12:03 +08:00 via Android
    经过楼上各位大神的分析,这段代码质量绝对过关。而且我遇到的大多数人在不用所谓的框架时也很难写得比这好!第一个 header 前面的 @符用来屏蔽 notice 错误,现在开 notice 错误写代码的人,我遇到的太少了。
    mingyun
        77
    mingyun  
       2018-01-12 23:54:34 +08:00
    empty($) && return false;
    suit
        78
    suit  
       2018-01-13 00:11:42 +08:00
    suit
        79
    suit  
       2018-01-13 00:16:04 +08:00
    @mingyun && 运算符只能计算标量、函数和表达式
    Senorsen
        80
    Senorsen  
       2018-01-13 01:03:26 +08:00
    不光是乱的问题了,代码本身也有问题。用 addslashes 代替 sql escape 就是一种错误做法。
    Annual
        81
    Annual  
    OP
       2018-01-13 01:18:50 +08:00
    @suit 你好,回答一下图片。
    1,因为是一个 pay 接口,所以并不会预先知道用户开发上使用哪一种请求方式。
    2,yes
    3,用户状态属性,因为只有 1 和 0 两个值,所以就直接写入了。
    4,原作者为什么要这么写我也不清楚,为了不引起各种错误,就没有进行更改,因为这个程序经过大量的 pay 测试。
    5,因为是 pay 程序,需要传递商品名称进行保留。
    580a388da131
        82
    580a388da131  
       2018-01-13 06:25:33 +08:00
    @Annual $_SERVER['REQUEST_METHOD']
    Seanfuck
        83
    Seanfuck  
       2018-01-13 09:16:29 +08:00
    挺清晰明了的,代码格式化一下就很好了
    ctro15547
        84
    ctro15547  
       2018-01-13 09:53:22 +08:00
    别吝啬空格和回车啊 你要是这样写 python 早就哭晕在大街上了
    daniellu
        85
    daniellu  
       2018-01-13 10:17:07 +08:00
    @yichinzhu 正解,SQL 注入妥妥的。
    Tink
        86
    Tink  
    PRO
       2018-01-13 11:02:29 +08:00 via iPhone
    需要格式化
    wizardoz
        87
    wizardoz  
       2018-01-13 13:13:44 +08:00
    这个标题我认为就挺乱的
    wmwgijol28
        88
    wmwgijol28  
       2018-01-23 19:10:29 +08:00
    你看过微擎的东西么
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3684 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 50ms UTC 00:15 PVG 08:15 LAX 16:15 JFK 19:15
    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