我们都应该学习PHP


今天这篇文章算是标题党吧,估计有很多朋友是因为PHP这三个字母进来阅读的。现在开发者社区里面都在贬低PHP,唱衰PHP,已然成了一个梗。但我觉得PHP非常值得大家重新认识,PHP开发者社区也非常值得大家学习。不见得是来学习PHP这门编程语言,可以学习PHP这门语言的设计思想和PHP开发者社区的运作模式。

PHP这三个字母官方的含义是这样的——PHP: Hypertext Preprocessor。但我想对PHP这三个字母做一个新的解读:Pragmatic、Humanized、Permanent。这三个单词也是我们所熟知的注重实效、人性化设计和长期主义。在我看来,PHP这门编程语言和它背后的开发者社区非常深刻地体现了这三种思想,而这正是我们现在提倡的回归的经营本质。

这么说有点太抽象,还是来举具体的例子吧。我说一个所有做管理软件的团队都会遇到的问题,如何应对客户的定制化需求?

可能的解决方案之一是开分支。开一个分支,在分支上进行定制开发,然后交付给客户。Git开分支很快,瞬间就完成了,挺简单的。但如果有十个客户、几十个客户、几百个客户呢?分支的维护就是巨大的成本。比如产生了Bug,需要在几十乃至上百个分支里面进行代码的合并更新,这个维护工作就要了命了。

另外一种可能的解决方案是在代码里面预留各种各样的配置开关。针对不同的客户采用不同的配置或者开关。但这种方式会造成大量的代码冗余,程序结构复杂冗长,逻辑结构不清晰。长期积累下来之后,代码就难以更新维护,成为屎山一样的代码。而且也没有办法完全解决客户个性化的问题,搞不好还是需要开分支来解决。

到后来低代码开发平台就开始流行。其实这也不是什么新鲜事。我记得在2013年左右的时候去一个客户那儿做培训,他们团队内部有一个高手,做了一套快速开发平台,给客户做交付全是在这个平台上进行各种配置。表面上来看是快了,但实际上复杂度只会转移,不会消失。快速开发平台带来的问题是抽象不够、表现能力不强。受限于快速开发平台本身的能力,难以解决更深层次的业务逻辑问题。所以这时候就需要快速开发平台提供更强大的能力,比如逻辑判断、循环,甚至需要直接开放编程接口,允许用户自己写代码来实现。到最后快速开发平台本身就变成了一个开发语言。

来说说我们禅道项目管理软件的解决方案吧。我们的解决方案就是给客户提供扩展。而我们的这种能力是基于PHP的运行机制实现的。众所周知,PHP是脚本语言,是动态加载动态执行的。而且它也有很完善的面向对象编程的机制,所以在PHP世界里面,可以做各种好玩的事情。禅道项目管理软件的代码分为了大家所熟知的MVC三层,即Model、View、Controller。同时我们又细分了Configuration、Language、CSS和JavaScript这些概念。在框架层我们还有基础的Framework和核心的Library。所有的这些不同层次的代码都是可以扩展的。禅道的所有请求都会经由一个单一入口来加载,框架在加载代码的时候会优先判断扩展目录里面有没有符合扩展规则的代码需要加载。如果有的话,就先加载扩展的代码。而扩展的代码在继承基础代码的基础上又可以做进一步的修改。通过这种方式我们就实现了非常完整的扩展机制,可以根据客户的需要做各种的改动。我们给客户交付的都是扩展代码,从来不开分支。

禅道软件的这种扩展机制,其实是很简单的一种架构,没有什么太复杂高深的技术。无外乎就是定义各种的扩展规则,然后实现动态加载的逻辑就可以了。但恰恰是这种简单的架构是最有效的。可以有效解决个性化定制和主干代码更新的问题。而这种能力是在PHP语言的动态机制基础上构建的。这是PHP注重实效的非常好的一个体现。

PHP社区也非常注重开发者友好。我就不多讲,简单说几个点。比如PHP的手册,非常成体系,非常翔实,是我见过所有编程语言里官方文档维护得最好的。PHP在语言设计的时候也尽量给到开发者各种的自由,没有太多强制的地方。同一个问题在PHP世界里面有各种各样的实现方式。

PHP开发者社区也非常地稳健,不急不躁,稳步前进。PHP社区在更新迭代的时候采取了渐进式的方式,向下的兼容性做得很好。这样可以保证老版本PHP开发的程序也可以享受新版本PHP带来的性能提升的收益。两年前PHP社区还成立了基金会,累计募集了超过110万美金的资金,截止今天账面上结余73万美金。在过去的一年里,PHP基金会雇用了6位全职或者兼职的PHP开发人员。在新的一年里还会计划雇用4名开发人员。消息发出后,PHP基金会共得到了207份申请。PHP基金会从中选出了12名合格候选人的候选名单,又从中选出了4名杰出的开发者。自从成立了基金会之后,PHP的发版速度也在加快,一切都在朝着更好的方向发展。

今天是借PHP这门编程语言展开讨论。但其实在产品研发和企业经营过程中也是一样的道理。同样也需要注重实效、人性化设计和长期主义。随着新经济周期的到来,我相信会有越来越多的团队开始注重三者。比如我最近就看到了好多从微服务架构重新用单体应用模式重构的案例。

我是春哥,禅道软件公司的创始人,二十年的IT老兵,14年的创业者。这是我的个人公众号。喜欢编码,喜欢做产品,所以我用了代码之歌做我的公众号的名字。我会持续地更新关于企业管理、产品管理、项目管理、团队建设、创业、学习型组织、企业文化、开源软件等方面话题的实践和思考,欢迎大家和我讨论交流。

我们都应该学习PHP
​2023年12月24日 拍摄于 · 杭州西湖

版权声明
作者:Tinywan
出处:mp.weixin.qq.com/s/8QElDFBAYc7dPDc...
本文版权归作者和禅道官方共有。欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎关注个人微信公众号,一起进步!扫描左方二维码即可

我们都应该学习PHP

本作品采用《CC 协议》,转载必须注明作者和本文链接
Tinywan
讨论数量: 7
JaguarJack

我想知道禅道目前使用的 PHP 版本是 8 还是 7

4个月前 评论
Tinywan

7.4

4个月前 评论
JaguarJack 4个月前
fatrbaby

这不是春哥的文章吗?

4个月前 评论

其实学习任何一种语言都没有错,而社会更推荐学什么语言,是根据市场需求来决定的。在互联网发展的早期,全世界都在学习PHP,wordpress享誉世界,无论国内还是国外都有大量的PHP系统和站点,一片兴兴向荣。但是为什么后面又不流行了呢?

首先,PHP由于弱语言,比较多安全问题,还有语法的自由导致极难维护,当然这些都不是重点,重点在于前期国内创业潮,凡是能跟互联网挂钩的都能融资。而PHP做项目极快,也就是搞钱很快。所以很多人用它来做前期启动项目的语言。

后期由于没有创业潮了,各个平台趋于稳定,数据量上来了。用户上来了,大数据算法时代来临。还有智能AI这些不断的冲击下,PHP语言的弱点就开始明显,或者说不足。大数据方面和算法方面,更多的人用python写轮子,将潮流引向Python,各个培训部门也在推这个语言,导致一大批人用Python,还有高并发的Go语言天生就带有这种属性,让很多平台开始将系统切换到Go语言。

最终导致,大企业的招聘几乎都是一面倒的Go,python,以及Java(Java一般国企比较多)。这些语言的特色要么比较传统稳重(Java),要么让人使用更方便(Python相对于算法,AI),要么更适合高并发(Go)。

综上,学习任何一种语言都没有问题。 回归文章,谈到了您的产品禅道,举例了一个扩展的思想,其实就是类继承或者接口类实现。我也写过一个开源cms,我比较粗暴的直接将扩展放入指定文件夹,加载项目类的时候,先判断扩展文件夹有没有相同的类名,有的话,直接加载扩展类,不加载系统类,从而实现定制化覆盖原系统类。调用方法的时候,也是同样先判断是否有扩展类下同名类,里面是否有相同的方法名,如果有则调用扩展类里面的方法,否则调用系统类。这类设计粗暴简单,适合小软件。如果是比较大型的系统,要考虑的比较多,最好是将所有外部增加的业务代码放到一个文件夹,之后再分类,进行交付给用户,这样就形成了各种定制化。

在我看来,当你熟练掌握某一种语言的时候,就能做到熟能生巧,套用其他任何语言也是差不多的。

4个月前 评论
Tinywan (楼主) 4个月前

学习 PHP 开源社区的长期主义,几十年来一直持续不断的迭代更新。 :+1:

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
技术经理 @ 开源技术小栈
文章
1
粉丝
3
喜欢
2
收藏
1
排名:2037
访问:922
私信
所有博文
博客标签
社区赞助商