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

接触了几家公司的 PHP 代码,发现这些代码真的很丑陋

  •  
  •   szopen · 2015-12-18 16:44:12 +08:00 · 7680 次点击
    这是一个创建于 3296 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想大概是因为 PHP ,没有太多强制性规范,加上 PHPer 水平高低不同,以及项目管理人员水平限制,才出现了这么多丑陋的代码

    另外大部分PHP程序员还处于或长被动处于改网页阶段,所以水平真的很低
    39 条回复    2016-01-05 10:14:02 +08:00
    ben548
        1
    ben548  
       2015-12-18 16:52:59 +08:00
    确实如此,深有体会, php 没有什么强制性的规范,代码比较难以阅读和维护,不同程序员就连命名规范、代码风格都有很大的差别
    odirus
        2
    odirus  
       2015-12-18 16:55:09 +08:00
    无论哪种语言都会存在这个问题,根本原因是人、团队。
    GuangXiN
        3
    GuangXiN  
       2015-12-18 16:59:43 +08:00
    语言把强制规范定得再完善,也挡不住 low b 写出烂代码
    Scholer
        4
    Scholer  
       2015-12-18 17:05:12 +08:00
    看这里: http://0x1.im/blog/php/php-cs-fixer.html

    约束不是没有 如何执行是问题。
    simo
        5
    simo  
       2015-12-18 17:09:14 +08:00
    任何语言都有这个问题
    你说的问题可能原因: php 门槛低、从业者基数大,被你捉到概率大。
    Zzzzzzzzz
        6
    Zzzzzzzzz  
       2015-12-18 17:13:38 +08:00   ❤️ 1
    现在已经好很多了, 国内最早搞 php 的一批人很少有科班出身的.

    "不要用 class, 因为 class 比 function 性能烂."

    "copy+paste 改改比封装进函数性能好"

    "不要用模板引擎, 这样性能烂."

    "获取时间不要用 time(), 用$_SERVER['REQUEST_TIME']"

    "别用新版本的语言特性, 部署的虚拟主机 php 版本比较旧"

    能想象这是 10 多年前国内 php 社区的开发主流思想么?

    再加上 php 官方的包管理 pear 没什么存在感, 当时代码托管地也就数 sf 了, 管理三方库基本靠去各开源程序官网下载, 或者去 phpclasses 和一些私人 blog copy+paste, 版本控制也很少有人用, 维护老代码基本就是噩梦.
    knightdf
        7
    knightdf  
       2015-12-18 17:23:27 +08:00
    哈哈哈,哪个 php 代码不丑?
    Jaylee
        8
    Jaylee  
       2015-12-18 17:28:06 +08:00
    @Zzzzzzzzz 推动国内 php 开发者的水平靠你了
    Pastsong
        9
    Pastsong  
       2015-12-18 17:28:59 +08:00
    php 就是那种不用框架和设计模式,可以写得非常丑的语言
    quix
        10
    quix  
       2015-12-18 17:29:57 +08:00
    哪有不丑的 php, 来个不丑的看看?
    laucie
        11
    laucie  
       2015-12-18 17:31:03 +08:00
    自黑-->>群黑 php
    neilwong
        12
    neilwong  
       2015-12-18 17:40:43 +08:00
    github.com 上 stars 前三的 php 框架拿来用呗,又没上升到架构那个层次,还是用现成框架比较好
    Zzzzzzzzz
        13
    Zzzzzzzzz  
       2015-12-18 17:57:07 +08:00
    @Jaylee 我就一拉后腿的自黑来着, 我上一次拿 php 写完整项目的时候 phpe 还挺火来着.
    young
        14
    young  
       2015-12-18 18:15:39 +08:00
    人的问题, 这还用说吗
    movtoy
        15
    movtoy  
       2015-12-18 18:17:15 +08:00   ❤️ 3
    @Zzzzzzzzz
    因为 php 卖的最火的一本书: PHP 和 MySQL.Web 开发(第 4 版),最新的还是 09 年的。书里的第一个大型案例还是 10 年前的,封装几个函数,把页面输出都写在函数里。




    写代码这种东西。就跟大学生就跟找女朋友一样,每个人都要求找校花,那么 99%的大学生都不会有性经验了。

    我鼓励大学生先找个能用的!积累经验(当然不是专指性经验),不然即使你以后找到校花级别的,你也会因为(相处)经验不丰富而被甩掉。


    写代码,一开始就要求类的设计,模式、继承、接口这些,可能你学了 n 年都学不会完美的设计。。如果淘宝一开始就要求多好,现在马云还家空想呢。

    要接受不完美,什么东西都是渐进的,一开始不要想太多高大上!
    LINAICAI
        16
    LINAICAI  
       2015-12-18 18:19:24 +08:00
    php 算是门槛最低的,所以连我这种写客户端的人都会写的,能有多高的水平?
    话说,基本上所有语言都有这种现象吧,这方面,公司不做规范,那你就要从招人方面入手~
    GeekGao
        17
    GeekGao  
       2015-12-18 18:57:51 +08:00
    看看 facebook 开源的 PHP 项目,其实还是看人
    chinvo
        18
    chinvo  
       2015-12-18 21:12:49 +08:00
    我感觉楼主这个地图炮放的挺好
    yxzblue
        19
    yxzblue  
       2015-12-18 21:14:07 +08:00
    看看 Yii 框架,其实还是看人
    woailuosj
        20
    woailuosj  
       2015-12-18 21:19:25 +08:00
    同感,总觉着 php 代码欠缺一定的约定,导致代码层次不齐,很是 low
    whatisnew
        21
    whatisnew  
       2015-12-18 21:59:49 +08:00
    @Zzzzzzzzz 我觉得这个列表里边很多说的都有道理,比如 time() 比 $_SERVER['REQUEST_TIME'] 慢
    chinvo
        22
    chinvo  
       2015-12-18 22:09:36 +08:00
    @whatisnew 这点是必然的,因为一个是调用函数时去读取当前时间,一个是从数组读取用户请求页面时的时间。
    虽然列表里面很多都有道理,但是在现在看来,这点性能的牺牲所带来的其他方面的进步要远比性能成本突出。
    比如某著名 PT 程序,早期版本乱得一塌糊涂,简直没法看,改了几次功能,重构的心都有了。
    不过列表中所列出的“烂”的东西,用的好的话也是可以提升性能的。
    回到楼主的话题,代码丑陋还是因为人的原因,我看到的不少 C#和 JAVA 的代码也很丑(当然,我不得不承认 C#和 java 一般格式化比较统一,但是不关注格式化,但看函数名、方法名、变量名还有逻辑,仍旧有不少十分丑的代码存在)
    whatisnew
        23
    whatisnew  
       2015-12-18 22:15:03 +08:00
    @chinvo $_SERVER 是一个全局变量;

    我只所以说这个列表里很多说的的有道理,是因为从单纯性质的角度上来说。
    关于代码烂不烂要看什么样的业务需求什么样的应用场景什么样的解决方案。

    我就想打印一个用户每一次请求的时间,我 tm 还要讨论一下设计模式吗
    msg7086
        24
    msg7086  
       2015-12-18 22:23:17 +08:00 via Android
    @chinvo nexusphp 的代码拿到手就想 shift del 。改代码如吃翔…
    aksoft
        25
    aksoft  
       2015-12-18 22:25:23 +08:00
    把自己的亮出来看看
    ooh
        26
    ooh  
       2015-12-18 22:37:26 +08:00
    不知 lz 现在写 PHP 代码是否已经遵守 PSR 规范,是否会用 PHPMD 来检查自己的代码。
    sheng9632
        27
    sheng9632  
       2015-12-18 23:51:09 +08:00
    @movtoy 这个比喻我服
    wdhwg001
        28
    wdhwg001  
       2015-12-19 01:14:16 +08:00 via iPhone
    我一直不觉得那些古老的最佳实践会让代码丑,即使连“函数名影响 hash 性能”这样的要求都遵守的话也依旧能写的出人类可以看懂的代码的。
    因为 php 本就是这样神奇的语言啊。 php 连它自己的函数名都难以记忆,还能让人对这玩意有什么期待…
    xiaozi
        29
    xiaozi  
       2015-12-19 01:15:38 +08:00
    你是通过换工作接触了几家吗?
    ajleo
        30
    ajleo  
       2015-12-19 07:07:15 +08:00   ❤️ 1
    @movtoy 《 PHP 和 MySQL.Web 开发(第 4 版)》这书简直烂到家了,国内 PHP 论坛还在推荐。我上年开始写 PHP 的时候特意托家人从国内带来中文版,然后看了没四分之一就看不下去。这都该进博物馆的玩意还被人推崇着,看这个写出来的代码都 Deprecated 了。
    iugo
        31
    iugo  
       2015-12-19 10:38:23 +08:00
    @Zzzzzzzzz 现在和以前大不同了. 包管理器 Composer 已经比较流行, 有些人在用 Git 管理版本, 也见到其他公司用 SVN 的. 一些工具如 Sublime Text 下的 phpfmt 也让代码规范 PSR-2 也很容易达成.

    总之, 现在写 PHP 可以好好写的.
    eoo
        32
    eoo  
       2015-12-19 10:54:02 +08:00 via Android
    我大 POP 语言即将出世,这门语言就是用来替代 PHP 而生的,完全没有缺点,集各大编程语言优点,抛各大编程语言缺点,全地球最牛逼的编程语言,你值得 yongyou 。
    jhdxr
        33
    jhdxr  
       2015-12-19 11:30:14 +08:00
    @Zzzzzzzzz 坦白说,你贴出来的这几条建议,每一条都是“正确”的。我这儿所说的正确的意思是,在大概 2~3 年前,我自己进行过测试,这些话说的都没错,例如 copy+paste 的确真的比封装函数快(因为函数调用有额外开销)

    所以我觉得不是说这些话本身有问题,但是这种“优化”的建议是否适用还是要看场景,而且我个人觉得在绝大多数场景下,都还不至于要考虑到这种程度的性能优化,更何况这其中很多都是极其牺牲代码可读性的
    hbkdsm
        34
    hbkdsm  
       2015-12-19 13:16:14 +08:00
    @ajleo 确实啊,大烂书一本。心疼 money
    Liir
        35
    Liir  
       2015-12-19 16:30:26 +08:00
    php 就是下里巴人嘛,至于上面有些人说的不要使用新版本特性, php5 刚出来那会这里应该有很多人还没有代码美与丑的观念呢吧。
    likezun
        36
    likezun  
       2015-12-20 15:28:36 +08:00
    PHP 不用框架可以高速写出很多应用,解决适合他的应用场景。小型项目代码乱,也是有他的原因的,大型项目为何不提? 其他语言应用通常是由框架实现, php 有各种实现不同场景的框架,小中大甚至不用框架,代码丑乱?你们知道 symfony 吗!
    MrZephyrus
        37
    MrZephyrus  
       2015-12-20 16:20:23 +08:00
    @odirus 说得对
    lenran
        38
    lenran  
       2016-01-01 02:15:00 +08:00
    @Zzzzzzzzz 不是 class 和 function 的问题,过度封装确实是会牺牲一些性能的
    Nixus
        39
    Nixus  
       2016-01-05 10:14:02 +08:00
    @ooh 请教一个问题, phpmd 提示, func accesses the super-global variable $GLOBALS
    是在函数中使用了超全局变量了,请问,有什么替代方式?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:13 · PVG 13:13 · LAX 21:13 · JFK 00:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.