突然没有了在 PHP 继续学习的兴趣 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
HanMeiM
V2EX    程序员

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

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

    虽然在使用 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
    akagishigeru
        13
    akagishigeru  
       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     Solana     1369 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 16:41 PVG 00:41 LAX 09:41 JFK 12:41
    Do have faith in what you're doing.
    ubao 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