虽然在使用 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 ![]() 方法传入的参数是数组是写的人的问题 |
4 richangfan 2018-11-05 16:15:02 +08:00 ![]() 写代码就是复制粘贴,别管那些 |
![]() | 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 akagishigeru 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 ![]() 我写的代码烂是因为我用的语言烂 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 ![]() 还有看你的代码风格,还有改进空间。如果项目参与的人水平不够好,确实令人头疼。 我写了七年多 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 ![]() 都是坑啊,换个语言你会发现 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 ![]() 看了你贴的代码截图,感觉你连对象,实例,静态方法都没搞明白。 |
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 多垃圾;实在是看不下去了。 |