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

2018-11-05 15:53:24 +08:00
 HanMeiM

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

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

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

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

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

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

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

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

4667 次点击
所在节点    程序员
63 条回复
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
2018-11-05 18:40:21 +08:00
@huijiewei 实例化的对象后缀是 Repository,也就是数据持久层(DAO),他的构造方法会帮你实例化 Model。如果要使用静态方法的话就需要链式操作实例化 Model。不知道你有没有听明白这个架构。
HanMeiM
2018-11-05 18:47:32 +08:00
@feiyuanqiu 好的,学到了哈,谢谢。
huijiewei
2018-11-05 18:52:11 +08:00
@HanMeiM 嘴硬的很啊,我就问你,你这个 Repository 的每个实例有什么不同,为啥要实例化?构造函数没有传入任何参数,也没有设置任何属性?实例化的意义在哪里?

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

言归正传,觉得当前的技术环境不好,就跳出去,路是自己一步一步走出来的,这跟语言无关,甚至和行业无关。
tailf
2018-11-06 10:19:57 +08:00
没有王垠的命,就不要得王垠的病,你水平低到无法评价任何一门技术。
shench
2018-11-06 11:25:40 +08:00
PHP 是世界上最好的语言。
ben1024
2018-11-06 12:22:21 +08:00
PHP 在规范上先天不足,其他语言写出烂代码也比比皆是。
代码本身就是混沌
HanSonJ
2018-11-06 13:06:45 +08:00
没有特别优秀的语言,但有优秀的人才,你可以选择与优秀的人工作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/504672

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX