2019年,PHP已不再是当年那个“设计糟糕”的语言

之前,有一篇非常流行的博客是《PHP:那些糟糕的设计》,第一次读到这篇博客的时候,我正在一个非常破旧的地方工作,处理着许多PHP遗留项目。这篇博客对我触动很深,我开始思考是否要停止编程,换一份完全不同的工作。

幸运的是,很快我就换了一份工作,而PHP在5.X版本之后又有了很多新的改进。今天,我要向那些不再使用PHP编程,或者陷入遗留项目的人致敬。

剧透:直到今天,PHP仍有很多糟糕的东西,例如许多核心功能仍然存在不一致的方法签名,仍然存在令人混淆的配置设置,仍然会有一些开发者因为知识的缺乏而导致写的代码很糟糕等等。
但是,本文我想把目光集中在PHP已经改进的地方上面,以及如何写出更加干净和易维护的PHP代码。也许你不会改变对PHP的看法,但很有可能,你会吃惊于过去几年PHP的进步。

要点:

  • PHP每年都会推出一个新的版本;
  • 自PHP 5代之后,其性能不断提升;
  • 有框架、包和平台组成的活跃生态系统;
  • 过去几年间,PHP添加了许多新的特性,且现在仍在持续演进。
  • 许多工具如静态分析器也越发成熟,未来也将继续发展。

更新:很多人希望我能够展示一下实际代码,这是我其中一个业余项目的源代码,它是用PHP和Laravel写的,另外还有一个是我们在办公室负责维护的上百个OSS包的列表。

回顾历史

让我们先快速回顾一下PHP的版本发布周期。现在PHP的版本是 7.3,预计2019年末将发布PHP 7.4,7.4之后的版本将会是PHP 8.0。

从5.X版本之后,PHP核心团队一直在努力每年发布一个新版本,并且在过去的4年间,这一目标一直完成得很好。

大致来说,每个新版本都会用2年时间进行积极地支持,然后用一年进行“安全修补”工作。这样做的目的是促使PHP开发者尽可能保持最新状态,例如每年都升级比从5.4直接跳到7.0要简单得多。

PHP具体的版本发布情况,可以点击此处

搞清楚PHP的发展历程后,我们来谈谈大家对PHP的常见误解。

PHP的性能

在5.X版本时代,PHP的性能平均而言是最好的。而在7.0时代,大部分的PHP核心都从零开始重写了,其性能能够达到之前的2-3倍。口说无凭,幸运的是,有人花了大量时间来测量PHP的性能,Kinsta提供了一个很好的更新列表。

从7.0版本以来,PHP性能就只升不降。PHP web应用的性能可以和其他语言web框架的性能相提并论,甚至更高(具体测试情况可点击该链接:https://github.com/the-benchmarker/web-frameworks)。

当然,PHP框架的性能还无法超越C和Rust,但是要比Rails或Django好,且能够和ExpressJS相媲美。

框架和生态系统

在谈到框架时,PHP已经不再只是WordPress了。作为职业的PHP开发者,我认为,WordPress无法从任何层面代表当今的生态系统。

总体来说,有2个主要的web应用框架以及一些相对而言较小的框架,如SymfonyLaravel。除此之后,还有Zend、Yii、Cake、 Code Igniter等等。

如果你想了解现代PHP开发究竟是什么样子,那么就需要掌握SymfonyLaravel中的一个,这2个框架都有庞大的生态系统,包含各种包和产品。从管理面板和客户关系管理系统(CRM)到单独的包,从持续集成(CI)到性能监视工具,我们有无数的服务如web套接字服务器、队列管理器、支付集成等等。

但是,这些框架都是为实际开发而设计的。如果你需要纯粹的内容管理,WordPress和CraftCMS是理想选择,而且它们还会不断优化。

衡量PHP生态系统目前状态的方法是看一看Packagist,它是PHP主要的包仓库。在过去的时间里,它呈现出了指数式增长的态势,每天2500万左右的下载量,足以说明PHP生态系统已经不再是过去那种弱者了。

Packagist网站上列出了过去的包和版本数量:

除了应用框架和内容管理系统(CMS)以外,我们还发现,在过去几年,异步框架也崛起了。

异步框架是指用PHP或其它语言编写的框架和服务器,它们能够让用户运行真正异步的PHP。异步框架的例子包括:SwooleAmpReactPHP

由于我们已经进入异步领域,具有大量IO的web套接字和应用等东西在PHP世界中就变得非常重要。

另外,人们还谈到了内部邮件列表,在邮件列表中,PHP核心开发者讨论了PHP语言的进一步发展,例如增加libuv到核心之中。对于不熟悉libuv的人来说,libuv同Node.js用于实现其所有异步性的库一模一样。

语言本身

尽管异步(async)和等待(await)还未面市,但PHP在过去几年已经经过了许多改进,下面便是PHP新特性的不完全列表:

尽管我们的主题是PHP的语言特性,但我还是觉得需要谈一下PHP语言的开发流程。虽然社区被允许提出RFC,但仍有一个活跃的志愿者核心团队在推动PHP的发展。在添加一个新的语言特性之前,必须要进行投票。只有获得2/3多数选票的RFC才能被添加到核心中。

大约有100个人可以投票,但你不需要给每个RFC投票。核心团队的成员毋庸置疑能够投票,因为他们必须维护代码库。除了他们以外,还有一群人是单独从PHP社区中挑选出来的,这些人员包括PHP文件的维护人员,PHP整体项目的贡献者,以及PHP社区中颇具威望的开发者。

虽然大多数核心开发是由志愿者组成的,但其中一名核心PHP开发者Nikita Popov近期被JetBrains雇佣,并全职负责该语言的开发。另外一个例子是Linux基金会决定投资Zend框架。上述这些雇佣和收购行为确保了未来PHP开发的稳定性。

工具

除了核心本身,我们还目睹了过去几年间工具的增长。首先进入我脑海的是静态分析器如Vimeo发明的Psalm,以及PhanPHPStan

这些工具能够静态分析PHP代码,并且报告打字错误、可能的bug等等。在某些方面,它们提供的功能足以和TypeScript相媲美,但目前PHP还没有被转编译(transpile),因此它并不支持定制句法。

虽然这意味着我们必须依赖于文档块,但PHP的最初发明者Rasmus Lerdorf提出了将静态分析引擎添加到核心之中的想法。这个想法潜力巨大,但任务量着实不小。

提到转编译,由于受到JavaScript社区的启发,有许多人试图将PHP句法延伸到用户空间中。一个名叫Pre的项目就做了这件事情:它支持新的已经转编译为普通PHP代码的PHP句法。

虽然这一想法已经在JavaScript中得以实现,但只有在提供了适当的集成开发环境(IDE)和静态分析支持后,它才能在PHP工作。这一想法非常有趣,但还必须不断完善,才能变成“主流”。

小结

尽管PHP还有很多缺点和遗留问题,但我可以充满信心地说,我喜欢使用它。就我的经验来看,它可以创建可靠、可维护和高质量的软件。如果使用得当,PHP对于web开发来说是个非常棒的选择。

查看英文原文:PHP in 2019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章