虽然在使用 PHP
的这么多年里学到了很多东西。
但是实习加正式工作 1 年多,越来越不喜欢写 PHP
了。
怎么说呢,PHP
写起来很奔放,正是由于他的奔放,写出来的代码往往就是五花八门,阅读维护起来费时费力,甚至一个项目的代码,写法都是很大的差别(心累)。
然后在工作中写过一段时间的 TypeScript
,发现静态类型写起来很舒服。PHP
有的时候回过头来发现,有的方法传入的参数还是数组类型的,自己都不知道那个方法应该传入一个什么样的参数,我还需要一层层的看内部代码才能知晓。
之后有位前辈总是给我说显式优于隐式,一直奉为信条。
最后还有一点人为因素,接触的部分 PHP
自己都对自己的代码不上心,总是说 PHP
而已嘛,能快速开发出功能就行了啊(例如第一份实习工作,创业公司主管连数据库索引都不知道是啥,缓存没听过,框架用的 10 年前的一套系统,天天就想着赶紧完成功能好上线)。并且很少会有人去写测试,总是在出现问题之后才来审核自己的代码,这样写出来的代码能有什么灵魂嘛。
目前在用 java
和 Go
刷 LeetCode
,期待下份工作。(不知道到时 PHP 的经验算不算工作经验)
本人普通本科今年毕业,目前找了个普通区块链公司工作,月薪勉勉强强 7k,base 成都。
1
justyy 2018-11-05 16:07:11 +08:00
PHP 是世界上最好的语言。
|
2
dobelee 2018-11-05 16:09:46 +08:00 via Android
提升人员素质,并在公司推动一套代码规范可解。
|
3
explon 2018-11-05 16:12:38 +08:00 3
方法传入的参数是数组是写的人的问题
|
4
richangfan 2018-11-05 16:15:02 +08:00 1
写代码就是复制粘贴,别管那些
|
5
HanMeiM OP @explon 我说实话很多都是这样写的,因为有的方法参数很多,然后既没有 interface 也没有 struct,更不会专门去建一个对象来存储该变量的结构。
|
7
zjsxwc 2018-11-05 16:30:08 +08:00
- php 7.1 了解下
- type hint 了解下 |
8
yogogo 2018-11-05 16:33:22 +08:00
面向对象的思想还是很重要的
|
9
likuku 2018-11-05 16:36:08 +08:00
工龄多年的人告诉你个可怕的事实:
就算你改行换工作,一年后也会无聊到死觉得浪费生命的。 |
10
HanMeiM OP |
11
xavier007 2018-11-05 16:43:41 +08:00
PHP7.1 了解一下,现在的新型框架都是显示类型
|
12
polymerdg 2018-11-05 16:43:48 +08:00
材料出生 自学 PHP
目前 世界 500 强 月薪 15K |
13
JaguarJack 2018-11-05 16:52:36 +08:00
php 的确弱化了面向对象的思维, 只是关键字的约束而已
|
14
Norie 2018-11-05 16:56:08 +08:00
这不就是那啥?敏捷开发。。。
|
15
RorschachZZZ 2018-11-05 16:56:34 +08:00
首先要约束自己,强迫自己写出好代码。其次,代码不测试,出了问题再审核。。。如果你做我当前的这种金融系统,简直不敢想象了。。
|
16
imdupeng 2018-11-05 17:01:36 +08:00
自己奇葩不要怪语言,不要乱甩锅。
在写方法的时候,都会在方法前写上注释,方法需要传入的参数类型,返回的数据类型。自己不写注释,记性又不好又不喜欢读代码,乱飞什么锅。 可以传入数组有什么问题?你不想要数组,可以代码写限制。开放性的不好,你还喜欢被强迫啊? PHP 这么平易近人的语言都被你用成这样,你还是换行吧,其他语言更不适合你 |
17
yamamotoahua 2018-11-05 17:02:40 +08:00 3
我写的代码烂是因为我用的语言烂 233
|
19
imdupeng 2018-11-05 17:17:08 +08:00
看你刚添加的图片,这么写不就对了嘛,谁要使用一目了然。
你说说,有什么问题? |
20
shiny 2018-11-05 17:19:25 +08:00
遵循 PSR 了吗
|
21
shiny 2018-11-05 17:21:15 +08:00 1
还有看你的代码风格,还有改进空间。如果项目参与的人水平不够好,确实令人头疼。
我写了七年多 PHP,最近也换其他语言作为第一语言了。 |
22
to2false 2018-11-05 17:22:06 +08:00
Type hint 和 注释写清楚,不然拖出去砍了
|
23
jowan 2018-11-05 17:22:51 +08:00
这种 IDE 配色让我抓狂
|
24
imdupeng 2018-11-05 17:23:14 +08:00
|
25
to2false 2018-11-05 17:23:56 +08:00
@to2false 补充一下,上 psr,也给安上 phpcs,预置检测在 pre-commit,如果这样都不行,换单位吧
|
26
HanMeiM OP @imdupeng 哎,说到底不是每份工作都是从头开始写代码,团队的每个人也都有自己的想法。当自己看以前的旧代码、或者是同事的代码,就很累(要是你还遇见一个特立独行的技术组长,简直要爆炸了)。现在慢慢喜欢上静态语言,感觉写起来很舒服
|
27
likaka 2018-11-05 17:25:43 +08:00
混口饭吃而已,别搞哪么专业
|
28
HanMeiM OP |
29
feiyuanqiu 2018-11-05 17:30:12 +08:00
想问一下,你这样直接在方法里 new Repository,怎么做单元测试呢,全局注入一个 mock 数据库吗?
|
31
nilrust 2018-11-05 17:32:30 +08:00 via Android 2
都是坑啊,换个语言你会发现 java 的烂代码也是铺天盖地。。
其实工作最重要的是团队水平,有代码审核,有重构意识,有代码审美的团队代码都不会太烂。 |
32
HanMeiM OP @feiyuanqiu 诶,首先 Laravel 自带模型工厂,然后 phpunit 有一对 setUp 和 tearDown 方法,每执行一次测试方法的时候都会运行 setUp,结束后会运行 tearDown。
|
33
feiyuanqiu 2018-11-05 17:40:06 +08:00
@HanMeiM #32 也就是测试的时候用的是真实数据库?遇到业务代码里有 insert、update 的情况,是不是还要在 tearDown 里做回滚?
|
34
HanMeiM OP @feiyuanqiu 测试肯定是在测试环境啊,哪里有生产环境去跑测试脚本的啊,兄 dei
|
36
feiyuanqiu 2018-11-05 17:44:46 +08:00
@HanMeiM #34 「真实数据库」不是「生产数据库」,算了没什么
|
37
HanMeiM OP @feiyuanqiu 哦哦哦哦,理解你的意思了。确实是这样的哈,在 tearDown 里进行删除,或者在执行数据库操作的时候可以启用事务最后再回滚,Laravel 自带的有两个 [trait]( https://laravel-china.org/docs/laravel/5.7/database-testing/2304) 可以看一下,一个是每次执行测试都回滚迁移,一个是直接用事务
|
38
FrankAdler 2018-11-05 18:09:01 +08:00
语言层面的太灵活限制太少, 编码人员的参差不齐就会导致项目代码五花八门, 维护起来费劲
楼主表达的应该是这个意思, 不知道有些人... |
39
SeaRecluse 2018-11-05 18:22:37 +08:00
记得当年的学习之路 C++ -> java/c# ->php ??(//php please) -> python 哈哈哈哈
|
40
huijiewei 2018-11-05 18:26:43 +08:00 1
看了你贴的代码截图,感觉你连对象,实例,静态方法都没搞明白。
|
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 |
42
HanMeiM OP @huijiewei 实例化的对象后缀是 Repository,也就是数据持久层(DAO),他的构造方法会帮你实例化 Model。如果要使用静态方法的话就需要链式操作实例化 Model。不知道你有没有听明白这个架构。
|
43
HanMeiM OP @feiyuanqiu 好的,学到了哈,谢谢。
|
44
huijiewei 2018-11-05 18:52:11 +08:00
@HanMeiM 嘴硬的很啊,我就问你,你这个 Repository 的每个实例有什么不同,为啥要实例化?构造函数没有传入任何参数,也没有设置任何属性?实例化的意义在哪里?
你连 OOP 的基础都没有,还跟我谈架构?笑掉大牙 |
45
OMGZui 2018-11-05 18:55:42 +08:00 via Android
楼主是嫌薪水没 java 和 js 高吧,那还是尽快转语言吧
|
46
lihongjie0209 2018-11-05 18:57:09 +08:00
@imdupeng 一个连代码都写不好的人还期望注释能写好?
|
47
abux1024 2018-11-05 18:58:00 +08:00
从入门到放弃
|
48
HanMeiM OP @huijiewei 我已经说了啊,构造方法会帮你实例化 model,对数据的操作直接写在 Repository 里面。请问我不实例化 model 如何操作呢。每个静态方法都去实例化自己或者实例 model 吗?或者直接写 model 的静态方法吗?不好意思,公司不允许你这样。你气不气?
|
49
WytheHuang 2018-11-05 19:02:33 +08:00 via Android
这个还不是语言的锅。人的问题,再好语言没有代码规范和测试跟屎差不多。
|
50
masker 2018-11-05 19:02:36 +08:00 via Android
优越。
|
51
sagaxu 2018-11-05 19:06:51 +08:00 via Android
坏代码都是写的人的问题,这话没错。只不过 phper 这个群体,写坏代码的人比例特别高。然而对公司来说,优雅不等于好,丑陋不等于差。
|
52
DiverRD 2018-11-05 19:16:24 +08:00
你换个语言也是烂代码一大片,取决于你公司是业务驱动还是技术驱动
|
53
huijiewei 2018-11-05 19:44:02 +08:00
@HanMeiM 你不光逻辑不好,连语文都不好,我就问你,你代码里面的 Repository 实例化的意义在哪里? Repository 实例的 setDeleteAt 方法是什么鬼东西?
|
54
qwe61655 2018-11-05 23:11:23 +08:00 via iPhone
来 python,你会发现也一样
|
55
awesomelei 2018-11-06 09:40:48 +08:00
@huijiewei 他 getLastCode 方法应该不是静态方法, 所以得实例化成对象再调用? 目的应该只是为了调用非静态方法, 我也觉得问题不大, 如有异议, 望大佬指教
|
56
tailf 2018-11-06 10:17:04 +08:00
你都去区块链公司工作了就不要追求技术了,骗子公司可不是快糙猛上线骗一波钱最重要嘛。
言归正传,觉得当前的技术环境不好,就跳出去,路是自己一步一步走出来的,这跟语言无关,甚至和行业无关。 |
57
tailf 2018-11-06 10:19:57 +08:00
没有王垠的命,就不要得王垠的病,你水平低到无法评价任何一门技术。
|
58
shench 2018-11-06 11:25:40 +08:00
PHP 是世界上最好的语言。
|
59
ben1024 2018-11-06 12:22:21 +08:00
PHP 在规范上先天不足,其他语言写出烂代码也比比皆是。
代码本身就是混沌 |
60
HanSonJ 2018-11-06 13:06:45 +08:00
没有特别优秀的语言,但有优秀的人才,你可以选择与优秀的人工作
|
61
lj3lj3 2018-11-06 13:41:36 +08:00
目前还在写 PHP 的唯一原因是因为 Laravel
|
62
xxbutoo 2018-11-06 14:51:25 +08:00
那么你说了这么多 到底跟 php 有什么关系?
部门主管连数据库索引都不知道, 所以你就讨厌 php 了? |
63
shellic 2018-11-10 11:27:31 +08:00 via Android
我觉得好多人都是在随大流的为黑而黑,好凸显自己多 NB,PHP 多垃圾;实在是看不下去了。
|