V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
HanMeiM
V2EX  ›  程序员

突然没有了在 PHP 继续学习的兴趣

  •  
  •   HanMeiM · 2018-11-05 15:53:24 +08:00 · 4305 次点击
    这是一个创建于 2239 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然在使用 PHP 的这么多年里学到了很多东西。

    但是实习加正式工作 1 年多,越来越不喜欢写 PHP 了。

    怎么说呢,PHP 写起来很奔放,正是由于他的奔放,写出来的代码往往就是五花八门,阅读维护起来费时费力,甚至一个项目的代码,写法都是很大的差别(心累)。

    然后在工作中写过一段时间的 TypeScript,发现静态类型写起来很舒服。PHP 有的时候回过头来发现,有的方法传入的参数还是数组类型的,自己都不知道那个方法应该传入一个什么样的参数,我还需要一层层的看内部代码才能知晓。

    之后有位前辈总是给我说显式优于隐式,一直奉为信条。

    最后还有一点人为因素,接触的部分 PHP 自己都对自己的代码不上心,总是说 PHP 而已嘛,能快速开发出功能就行了啊(例如第一份实习工作,创业公司主管连数据库索引都不知道是啥,缓存没听过,框架用的 10 年前的一套系统,天天就想着赶紧完成功能好上线)。并且很少会有人去写测试,总是在出现问题之后才来审核自己的代码,这样写出来的代码能有什么灵魂嘛。

    目前在用 javaGoLeetCode,期待下份工作。(不知道到时 PHP 的经验算不算工作经验)

    本人普通本科今年毕业,目前找了个普通区块链公司工作,月薪勉勉强强 7k,base 成都。

    第 1 条附言  ·  2018-11-05 17:10:43 +08:00


    随便截一下平时写的代码以及测试文件,免得有人说我没用过就来喷
    63 条回复    2018-11-10 11:27:31 +08:00
    justyy
        1
    justyy  
       2018-11-05 16:07:11 +08:00
    PHP 是世界上最好的语言。
    dobelee
        2
    dobelee  
       2018-11-05 16:09:46 +08:00 via Android
    提升人员素质,并在公司推动一套代码规范可解。
    explon
        3
    explon  
       2018-11-05 16:12:38 +08:00   ❤️ 3
    方法传入的参数是数组是写的人的问题
    richangfan
        4
    richangfan  
       2018-11-05 16:15:02 +08:00   ❤️ 1
    写代码就是复制粘贴,别管那些
    HanMeiM
        5
    HanMeiM  
    OP
       2018-11-05 16:23:52 +08:00
    @explon 我说实话很多都是这样写的,因为有的方法参数很多,然后既没有 interface 也没有 struct,更不会专门去建一个对象来存储该变量的结构。
    li901029
        6
    li901029  
       2018-11-05 16:27:02 +08:00
    @justyy 之一
    zjsxwc
        7
    zjsxwc  
       2018-11-05 16:30:08 +08:00
    - php 7.1 了解下

    - type hint 了解下
    yogogo
        8
    yogogo  
       2018-11-05 16:33:22 +08:00
    面向对象的思想还是很重要的
    likuku
        9
    likuku  
       2018-11-05 16:36:08 +08:00
    工龄多年的人告诉你个可怕的事实:
    就算你改行换工作,一年后也会无聊到死觉得浪费生命的。
    HanMeiM
        10
    HanMeiM  
    OP
       2018-11-05 16:42:15 +08:00
    @likuku 哈哈哈,别这样,我这才毕业呢你就给我灌输这种思维
    @yogogo 嗯呢。
    @zjsxwc 使用 7.1/7.0 快 1 年,php 的类型约束一直在用,感觉一般般吧,返回值约束是真的不好用。
    xavier007
        11
    xavier007  
       2018-11-05 16:43:41 +08:00
    PHP7.1 了解一下,现在的新型框架都是显示类型
    polymerdg
        12
    polymerdg  
       2018-11-05 16:43:48 +08:00
    材料出生 自学 PHP
    目前 世界 500 强 月薪 15K
    JaguarJack
        13
    JaguarJack  
       2018-11-05 16:52:36 +08:00
    php 的确弱化了面向对象的思维, 只是关键字的约束而已
    Norie
        14
    Norie  
       2018-11-05 16:56:08 +08:00
    这不就是那啥?敏捷开发。。。
    RorschachZZZ
        15
    RorschachZZZ  
       2018-11-05 16:56:34 +08:00
    首先要约束自己,强迫自己写出好代码。其次,代码不测试,出了问题再审核。。。如果你做我当前的这种金融系统,简直不敢想象了。。
    imdupeng
        16
    imdupeng  
       2018-11-05 17:01:36 +08:00
    自己奇葩不要怪语言,不要乱甩锅。

    在写方法的时候,都会在方法前写上注释,方法需要传入的参数类型,返回的数据类型。自己不写注释,记性又不好又不喜欢读代码,乱飞什么锅。

    可以传入数组有什么问题?你不想要数组,可以代码写限制。开放性的不好,你还喜欢被强迫啊?

    PHP 这么平易近人的语言都被你用成这样,你还是换行吧,其他语言更不适合你
    yamamotoahua
        17
    yamamotoahua  
       2018-11-05 17:02:40 +08:00   ❤️ 3
    我写的代码烂是因为我用的语言烂 233
    HanMeiM
        18
    HanMeiM  
    OP
       2018-11-05 17:03:51 +08:00
    @imdupeng 哦?我哪里有说我没写?还是说我没写类型约束?要不你秀秀拟写的代码我学学嘛
    imdupeng
        19
    imdupeng  
       2018-11-05 17:17:08 +08:00
    看你刚添加的图片,这么写不就对了嘛,谁要使用一目了然。

    你说说,有什么问题?
    shiny
        20
    shiny  
       2018-11-05 17:19:25 +08:00
    遵循 PSR 了吗
    shiny
        21
    shiny  
       2018-11-05 17:21:15 +08:00   ❤️ 1
    还有看你的代码风格,还有改进空间。如果项目参与的人水平不够好,确实令人头疼。
    我写了七年多 PHP,最近也换其他语言作为第一语言了。
    to2false
        22
    to2false  
       2018-11-05 17:22:06 +08:00
    Type hint 和 注释写清楚,不然拖出去砍了
    jowan
        23
    jowan  
       2018-11-05 17:22:51 +08:00
    这种 IDE 配色让我抓狂
    imdupeng
        24
    imdupeng  
       2018-11-05 17:23:14 +08:00
    @HanMeiM 我语言激烈,是看不惯那种自己问题,乱飞锅的。

    语言只是工具,锤子可以锤钉子,你用板砖锤钉子也可以啊。。要的是一个结果,钉子顺利钉进去,然后好使。
    to2false
        25
    to2false  
       2018-11-05 17:23:56 +08:00
    @to2false 补充一下,上 psr,也给安上 phpcs,预置检测在 pre-commit,如果这样都不行,换单位吧
    HanMeiM
        26
    HanMeiM  
    OP
       2018-11-05 17:25:20 +08:00
    @imdupeng 哎,说到底不是每份工作都是从头开始写代码,团队的每个人也都有自己的想法。当自己看以前的旧代码、或者是同事的代码,就很累(要是你还遇见一个特立独行的技术组长,简直要爆炸了)。现在慢慢喜欢上静态语言,感觉写起来很舒服
    likaka
        27
    likaka  
       2018-11-05 17:25:43 +08:00
    混口饭吃而已,别搞哪么专业
    HanMeiM
        28
    HanMeiM  
    OP
       2018-11-05 17:27:59 +08:00
    @to2false
    @shiny 我说实话,psr 这种东西我能遵守,但不是每个人都愿意遵守的,实习的时候技术组长要求变量下划线,现在工作的组长要求变量小驼峰,我也很无奈啊。
    @jowan 哈哈,我超爱这个配色,我的 vscode、iterm、phpstorm、idea 都是这个配色
    feiyuanqiu
        29
    feiyuanqiu  
       2018-11-05 17:30:12 +08:00
    想问一下,你这样直接在方法里 new Repository,怎么做单元测试呢,全局注入一个 mock 数据库吗?
    to2false
        30
    to2false  
       2018-11-05 17:30:17 +08:00
    @HanMeiM 这种情况,纯粹是上头有毒的问题啊,换个语言还不一样难受
    nilrust
        31
    nilrust  
       2018-11-05 17:32:30 +08:00 via Android   ❤️ 2
    都是坑啊,换个语言你会发现 java 的烂代码也是铺天盖地。。


    其实工作最重要的是团队水平,有代码审核,有重构意识,有代码审美的团队代码都不会太烂。
    HanMeiM
        32
    HanMeiM  
    OP
       2018-11-05 17:34:52 +08:00
    @feiyuanqiu 诶,首先 Laravel 自带模型工厂,然后 phpunit 有一对 setUp 和 tearDown 方法,每执行一次测试方法的时候都会运行 setUp,结束后会运行 tearDown。
    feiyuanqiu
        33
    feiyuanqiu  
       2018-11-05 17:40:06 +08:00
    @HanMeiM #32 也就是测试的时候用的是真实数据库?遇到业务代码里有 insert、update 的情况,是不是还要在 tearDown 里做回滚?
    HanMeiM
        34
    HanMeiM  
    OP
       2018-11-05 17:42:12 +08:00
    @feiyuanqiu 测试肯定是在测试环境啊,哪里有生产环境去跑测试脚本的啊,兄 dei
    HanMeiM
        35
    HanMeiM  
    OP
       2018-11-05 17:43:45 +08:00
    @to2false 有毒 +1,难道这种情况不是很常见吗?
    @nilrust 希望有那么好的运气吧
    feiyuanqiu
        36
    feiyuanqiu  
       2018-11-05 17:44:46 +08:00
    @HanMeiM #34 「真实数据库」不是「生产数据库」,算了没什么
    HanMeiM
        37
    HanMeiM  
    OP
       2018-11-05 17:50:45 +08:00
    @feiyuanqiu 哦哦哦哦,理解你的意思了。确实是这样的哈,在 tearDown 里进行删除,或者在执行数据库操作的时候可以启用事务最后再回滚,Laravel 自带的有两个 [trait]( https://laravel-china.org/docs/laravel/5.7/database-testing/2304) 可以看一下,一个是每次执行测试都回滚迁移,一个是直接用事务
    FrankAdler
        38
    FrankAdler  
       2018-11-05 18:09:01 +08:00
    语言层面的太灵活限制太少, 编码人员的参差不齐就会导致项目代码五花八门, 维护起来费劲
    楼主表达的应该是这个意思, 不知道有些人...
    SeaRecluse
        39
    SeaRecluse  
       2018-11-05 18:22:37 +08:00
    记得当年的学习之路 C++ -> java/c# ->php ??(//php please) -> python 哈哈哈哈
    huijiewei
        40
    huijiewei  
       2018-11-05 18:26:43 +08:00   ❤️ 1
    看了你贴的代码截图,感觉你连对象,实例,静态方法都没搞明白。
    feiyuanqiu
        41
    feiyuanqiu  
       2018-11-05 18:33:08 +08:00
    @HanMeiM #37 为什么不将 VerCodeRepository 通过依赖注入为类属性呢,单元测试应该关注测试类本身的代码逻辑,隔离开依赖的实现对其的影响。
    测试时使用真实数据库,一是测试结果不稳定(多个测试修改同一份数据);而是把测试弄复杂了、测试代码难写(先要往数据库插入数据,测试完成后要回滚,如果哪个开发忘记回滚,就可能影响其他测试)

    phpunit 自带了 mock 和 stub 工具,测试的时候注入一个 mock VerCodeRepository,什么问题都没了

    https://phpunit.de/manual/6.5/en/test-doubles.html
    HanMeiM
        42
    HanMeiM  
    OP
       2018-11-05 18:40:21 +08:00
    @huijiewei 实例化的对象后缀是 Repository,也就是数据持久层(DAO),他的构造方法会帮你实例化 Model。如果要使用静态方法的话就需要链式操作实例化 Model。不知道你有没有听明白这个架构。
    HanMeiM
        43
    HanMeiM  
    OP
       2018-11-05 18:47:32 +08:00
    @feiyuanqiu 好的,学到了哈,谢谢。
    huijiewei
        44
    huijiewei  
       2018-11-05 18:52:11 +08:00
    @HanMeiM 嘴硬的很啊,我就问你,你这个 Repository 的每个实例有什么不同,为啥要实例化?构造函数没有传入任何参数,也没有设置任何属性?实例化的意义在哪里?

    你连 OOP 的基础都没有,还跟我谈架构?笑掉大牙
    OMGZui
        45
    OMGZui  
       2018-11-05 18:55:42 +08:00 via Android
    楼主是嫌薪水没 java 和 js 高吧,那还是尽快转语言吧
    lihongjie0209
        46
    lihongjie0209  
       2018-11-05 18:57:09 +08:00
    @imdupeng 一个连代码都写不好的人还期望注释能写好?
    abux1024
        47
    abux1024  
       2018-11-05 18:58:00 +08:00
    从入门到放弃
    HanMeiM
        48
    HanMeiM  
    OP
       2018-11-05 19:01:29 +08:00 via iPhone
    @huijiewei 我已经说了啊,构造方法会帮你实例化 model,对数据的操作直接写在 Repository 里面。请问我不实例化 model 如何操作呢。每个静态方法都去实例化自己或者实例 model 吗?或者直接写 model 的静态方法吗?不好意思,公司不允许你这样。你气不气?
    WytheHuang
        49
    WytheHuang  
       2018-11-05 19:02:33 +08:00 via Android
    这个还不是语言的锅。人的问题,再好语言没有代码规范和测试跟屎差不多。
    masker
        50
    masker  
       2018-11-05 19:02:36 +08:00 via Android
    优越。
    sagaxu
        51
    sagaxu  
       2018-11-05 19:06:51 +08:00 via Android
    坏代码都是写的人的问题,这话没错。只不过 phper 这个群体,写坏代码的人比例特别高。然而对公司来说,优雅不等于好,丑陋不等于差。
    DiverRD
        52
    DiverRD  
       2018-11-05 19:16:24 +08:00
    你换个语言也是烂代码一大片,取决于你公司是业务驱动还是技术驱动
    huijiewei
        53
    huijiewei  
       2018-11-05 19:44:02 +08:00
    @HanMeiM 你不光逻辑不好,连语文都不好,我就问你,你代码里面的 Repository 实例化的意义在哪里? Repository 实例的 setDeleteAt 方法是什么鬼东西?
    qwe61655
        54
    qwe61655  
       2018-11-05 23:11:23 +08:00 via iPhone
    来 python,你会发现也一样
    awesomelei
        55
    awesomelei  
       2018-11-06 09:40:48 +08:00
    @huijiewei 他 getLastCode 方法应该不是静态方法, 所以得实例化成对象再调用? 目的应该只是为了调用非静态方法, 我也觉得问题不大, 如有异议, 望大佬指教
    tailf
        56
    tailf  
       2018-11-06 10:17:04 +08:00
    你都去区块链公司工作了就不要追求技术了,骗子公司可不是快糙猛上线骗一波钱最重要嘛。

    言归正传,觉得当前的技术环境不好,就跳出去,路是自己一步一步走出来的,这跟语言无关,甚至和行业无关。
    tailf
        57
    tailf  
       2018-11-06 10:19:57 +08:00
    没有王垠的命,就不要得王垠的病,你水平低到无法评价任何一门技术。
    shench
        58
    shench  
       2018-11-06 11:25:40 +08:00
    PHP 是世界上最好的语言。
    ben1024
        59
    ben1024  
       2018-11-06 12:22:21 +08:00
    PHP 在规范上先天不足,其他语言写出烂代码也比比皆是。
    代码本身就是混沌
    HanSonJ
        60
    HanSonJ  
       2018-11-06 13:06:45 +08:00
    没有特别优秀的语言,但有优秀的人才,你可以选择与优秀的人工作
    lj3lj3
        61
    lj3lj3  
       2018-11-06 13:41:36 +08:00
    目前还在写 PHP 的唯一原因是因为 Laravel
    xxbutoo
        62
    xxbutoo  
       2018-11-06 14:51:25 +08:00
    那么你说了这么多 到底跟 php 有什么关系?
    部门主管连数据库索引都不知道, 所以你就讨厌 php 了?
    shellic
        63
    shellic  
       2018-11-10 11:27:31 +08:00 via Android
    我觉得好多人都是在随大流的为黑而黑,好凸显自己多 NB,PHP 多垃圾;实在是看不下去了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1096 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 23:31 · PVG 07:31 · LAX 15:31 · JFK 18:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.