如何成为一个优秀的 PHP 工程师?

技术分享  / 只看大图  / 倒序浏览   ©

#楼主# 2019-11-6

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因为各种各样的原因,马上要成为一个前端 React 后端 PHP5 的程序员,并且很可能很多时间花在写 PHP 上面。之前对后端的了解只是了解一点 node,Express.js/KOA1 和 MySQL,比较熟悉 Javascript 和 Scheme(也就是说完全没有碰过 Java 和 CPP17); 请问如何 1. 写出不让同事想打人的 PHP 代码 2. 如何写优秀的可维护的 PHP 代码 3. 如何积累工作经验以及注重哪些地方才能成为一个不被 PHP 现有 frameworks 局限的优秀后端程序员
分享淘帖
回复

使用道具

墙和鸡蛋 发表于 2019-11-6 16:16:30
都说放弃php,php7足够应付大部分业务,难道所有的应用并发都那么高,运算量都那么大吗,知乎装比越来越厉害了,就和所有公司业务都是百万级一样,就算百万级大部分场景下php也足够应付。

有人统计过,高并发和高运算量业务在全国现有的情况只占10%,我就纳闷了,放着好用的不用,非去用效率低的,成本高的,而且效果都一样。
回复

使用道具 举报

术数古籍专卖疤 发表于 2019-11-6 17:51:18
只要你的同事中存在知乎PHP黑这样的角色,是无论如何也会被打的。写风格良好的代码真跟编程语言没太大关系,只怪你自己水平够不够。事实上,你如果了解OOP,了解设计模式,你写的PHP代码的风格真不会差到哪里去。

来黑PHP吧!让PHP像海燕般掠过风浪!
回复

使用道具 举报

123456833 发表于 2019-11-6 18:40:58
首先 声明一点 代码写的好和语言关系不大 更多的与对他人代码的阅读对代码本身的思考有关。
我一直觉得语言不重要 重要的是你思考过的问题空间。很多情况下,针对同一类问题,不同语言仅仅是对解决方案的不同描述罢了。但是,语言虽然不会影响你对问题的思考,却会影响你代码的实施与扩展性。


给新人的建议:
    努力去理解他人的代码 无论多烂 只有看过烂的代码 你才知道烂在哪里。下次你看到好的代码 才知道好的代码好在哪里。如果打算在公司还呆一年半载的话 最好能花时间把烂代码一点一点重构 不要怕捅娄子 细心排查 大胆求证。慢慢的你会发现自己的进步。 多看优秀开源框架代码 多看PHP的API。 用官方API的解决方法 肯定不是一个坏方法。特别是array的处理 如多用array_column array_combine array_merge。 一定减少foreach 和 if的嵌套使用。 代码其实还是为实际产品服务的 就像离开实际业务的架构都是耍流氓。所以多站在产品的角度考虑问题不断学习


对于写PHP的你,相对于其他语言的开发,你可能会有如下特点。
强项:
作为PHP开发经常啥都需要做,所以在通常会和直接与产品PK,在人力紧缺的情况下可能会运维 前端都干。什么原型图,docker+docker-compose,CI平台搭建,Redis,Mysql主从+分库分表,Nginx代理,端口转发,分布式ID生成解决方案,二进制RPC协议,CDN,http协议,Vue.js,Scss,Gulp 统统不在话下。
    对产品的理解。 Linux系统的熟悉度 前端技能
弱项:
    对强类型语言的数据类型掌握不全。PHP的array让你非常容易入门,但是降低了PHP的性能,同时也让你缺乏了对 list, map, struct, 泛型的实际操作 对线程 锁 并发的理解不够 思考过的问题空间较顶层,对底层的理解欠缺


所以在写了几年PHP之后 建议学习一门新的语言 比如golang 作为补充技能。


(以上均为个人见解,不服来辩)
回复

使用道具 举报

唰唰冷呵映 发表于 2019-11-6 18:57:42
这个问题是我提的,过了几个月的 php 受苦之后分享一点自己的经验。


因为 php 从诞生开始就是一门满是「破窗效应」的语言,考虑「优秀的 php 工程师」其实是不太现实的。我来讲讲如何成为一个「不会被同事打的 php 工程师」吧。
上 linter


不管你同事是否用 linter 是否会用 linter,在写自己的代码的时候必须上 phpcs 保证 code style,phpstan 尽量做静态分析,phpmd 来减少复杂度
当然,上面这几个 linter 都有很扯的地方;比如 phpmd 的 cleancode 里面有不能用 else 的默认 rule,phpcs 中 pear style 有必须有 license comment,drupal style 中有所有 comments 必须句号结尾....等等这些很扯的 rule 只要花上一天慢慢配置好改掉就行了。
对于老代码的话,尽量改改,php legacy code 没法过 linter 是正常现象;对于新代码,最好必须过 linter。
注意:phpcs 大部分 ruleset 有强制注释的要求,相信我,这是不能取消掉的内容。这不仅仅是为了自己的代码后来易读,这也是让代码看起来更加正式而抑制破窗效应的方法。
读 PSR;以及上 namespace
首先,psr 是必须要读的;但是对于 psr-4 而言比较尴尬的是,
    你不一定推的动 auto-loader legacy code 常常是随意污染全局「变量」的 (为啥变量加引号呢,这又是天杀的 php 函数和变量不一样的锅了)
另外如果你能在组里推动 auto-loader 以及保证大家不要污染全局的话,你们组也不会用 php 了。


这时候你需要在你负责的部分保证两点:
    构造自己以及全组能够接受的 namespace 标准,如果大家表示情绪稳定的时候,你可以考虑撸一个 autoloader.php 对于自己的代码,你最好能够保证 2.1)仅仅在必要的时候污染全局,争取将新定义的方法,变量和类用 namespace 隔离  2.2) 将表层业务和比较 stable 的方法分在不同的 namespace 中,这样在频繁的更改中,所有恶心的部分可以被隔离起来
php 的 namespace 有一些比较恶心的东西,比如找变量和如何找类是不同的方式,调用别的 namespace 的 函数作为 callback 等等;但是现在医保似乎能够报销中医,而中医擅长针对精神科疾病;所以有医保的话不用担心。
Decoupling
首先「php 是多范式编程语言」就是一个笑话;首先你看看 php 这么玩 callback 的:
Relative namespaces and call_user_func()

实际上,你能够用的 decoupling 方法只有把 stable component 构建出来,然后用依赖倒转之类的方法保证其他 component 依赖于 stable component
相关内容可以参考
A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series): Robert C. Martin: 9780134494166: Amazon.com: BooksUnit test and Integration test
code splitting 和 namespace 的一个好处是你可以写 unit test;你需要学习 phpunit,但是这个不算太恶心。
对于大部分情况下,你只要写了 unit test 你的同事们应该就能感恩戴德了;因为一般而言他们连 unit test 都不写
对于 coverage analysis,我只能说对于 php 而言这是存在的;但是 php 社区风气就「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」「消音」


好了,这里就是我自己关于 php 的一点点人生经验。
如何成为一个优秀的 PHP 工程师?-1.jpg
回复

使用道具 举报

风来时狂放 发表于 2019-11-6 19:51:45
首先排除新开php项目的情况。像我们这种90%的代码资产都在php技术栈上的公司都努力尝试在新项目里换其他语言平台(哪怕是golang -_-#)。何况居然还不是php7,还要用php5?
所以默认假设是进入一个legacy的代码库。那么:
1. 写出不让同事想打人的 PHP 代码
基本上你的同事应该已经在这个项目里待了更长时间,那就好办了,你有很大概率可以找到用来打他的更多代码。
2. 如何写优秀的可维护的 PHP 代码
向同事们学习!是不是优秀可维护不知道,做到通过代码形成互相威慑来达成和平还是很有希望的。
3. 如何积累工作经验以及注重哪些地方才能成为一个不被 PHP 现有 frameworks 局限的优秀后端程序员
偷偷写 node。Java 啥的也可。
当然,更有职业道德的方式是给它上微服务架构。这样就可以一个微服务一个微服务的逐步把 php 换成其他技术栈啦。就算换不了,因为微服务比较小嘛,代码规模小嘛,看上去就没有那么糟糕,或者糟糕也可以忽略啦!
回复

使用道具 举报

惜颜705 发表于 2019-11-6 21:13:16
1. 写出不让同事想打人的 PHP 代码
除非你不写代码,用任何语言,你都会写出让同事想打人的代码。但你开发时可以尽力写不重复,可被别人复用的代码,移交测试前多自测。可以大量减少同事想打人的次数。

2. 如何写优秀的可维护的 PHP 代码
在上面的基础上,多看别人优秀的框架,或者优秀人的代码,想想为什么这么用。在自己写代码的时候多思考,看看是否我能学以致用,同时自己写代码的时候想想写在自己代码中的这个位置是否合适。

3. 如何积累工作经验以及注重哪些地方才能成为一个不被 PHP 现有 frameworks 局限的优秀后端程序员。
上面人的回答应该是属于不被PHP思想所局限,这时多学几门语言是对的。但是你的问题是不被现有的PHP框架所局限,那答案应该是自己不用框架写一个项目或者说自己重新搭建一个框架写一个项目,这个项目不能有任何别人的代码或者库。开发一套下来你应该有所感悟。同时尽可能多看看PHP底层,尽可能从底层看懂PHP的生命流程和实现原理。这样你应该不受PHP框架所限制了。
回复

使用道具 举报

老橡树1 发表于 2019-11-6 22:32:50
对于一个PHP程序员,其实绝大多数情况下
好的PHP程序员==好的程序员。如果你有当好的合格的程序员,我有几个建议。你可以参考一下
1 阅读psr官方文档,这个是很重要的一步,通常而言遵循这个文档我都认为是一个合格的PHP程序员
2 面向ide编程,多写注释。要知道合格的注释是好的代码的基础,zend 提供默认的代码注释系统,你的类和函数他回自动添加注释。这很有效。要记住,不写注释一时爽,回来重构火葬场
3 多沟通,其实这个是程序员的通用技能,沟通技巧可以避免很多不必要的错误,等你工作之后犯错了自然会明白。出了问题可以询问同事和领导,他们会给你很好的建议。
4 多读源代码。好的框架,好的库的源代码都是PHP程序员学习的最好工具,学习他们的编码风格,思考他们为什么那么干。
5 读一些编程思想书籍 我这里推荐一本 <重构 改善既有代码的设计>,虽然他是Java的,当时他的编程思想确实通用的。他可以做到常读常新,每隔一段时间都可以读一读。
6 每隔一段时间都可以去翻一翻原来写过的代码,反思自己当时的设计,如果有时间可以考虑重构代码。当然如果你觉得你的代码不需要修改了,你可以考虑一下自己最近是否又在学习了
回复

使用道具 举报

今早我梦醒了坎 发表于 2019-11-6 23:02:16
很赞同首先要写出不让同事打的代码

规范代码是第一步,也是最重要的一步
回复

使用道具 举报

井底燕雀傥 发表于 2019-11-6 23:59:41
任何技术都是相通的,只要你有足够好的技术功底,换个语言只是熟悉语法而已
回复

使用道具 举报

慧眼识英雄1 发表于 2019-11-7 01:05:41
学习PSR规范, 学习设计模式, 讲真, 变量名和方法名的命名很重要.
起名的时候一定要见名知意!
起名的时候一定要见名知意!
起名的时候一定要见名知意!


多写注释多思考!
多写注释多思考!
多写注释多思考!
回复

使用道具 举报

唰唰冷呵映 发表于 2019-11-7 02:37:20
学习规范,多看多写多想,持之以恒。
回复

使用道具 举报

小雨敲窗y 发表于 2019-11-7 03:09:47
。。。。。无聊,干货0吧。用用知乎体看贴吧。自学
回复

使用道具 举报

落败的青春阳落s 发表于 2019-11-7 04:02:31
1.多看框架的源码
2.多应用看到的优秀代码方案改掉不好的代码
3.有服务意识;永远为下一个维护你代码的新人考虑维护成本;永远考虑和你合作开发的第三者
回复

使用道具 举报

尘埃416 发表于 2019-11-7 04:10:12
个人拙见
感兴趣,还是当做一个谋生手段---- 如果当做谋生手段 就是 能够干完 公司 指派的活 就可以了, 如果感兴趣, 那就是 多看别人的代码, 刷github,知乎,别人的博客. 多写一些自己感兴趣的例子
回复

使用道具 举报

永远就三年疗 发表于 2019-11-7 05:45:03
掌握好redis和mysql
回复

使用道具 举报

风吹吹蛋蛋疼风w 发表于 2019-11-7 05:54:46
语言只是体现形式,算法、思路、匠心才是程序的核心。想当年,自己用ASP应付了若干系统。包括在线考试系统,用西数百十块钱的虚拟主机,达到了20用户同时考试的并发。现在转PHP,在TH基础上,优化底层、设计缓存然后在基础上做P2P……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

宝贝不哭不t

新手猿

  • 主题

    6

  • 帖子

    6

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆