作者 | Brent

译者 | 张兰月

这篇文章不在于办理关于 PHP 的那个永恒话题,而是想让你理解,PHP 在这些年的进展以及那些值得关注的特性与发展现状。

php业余2019年了PHP已不再是昔时谁人设计糟糕的说话 JavaScript

之前,有一篇非常盛行的博客文章是“PHP:那些糟糕的设计”,第一次读到这篇博客的时候,我正在一个非常破旧的地方事情,处理着许多 PHP 遗留项目。
这篇博客对我触动很深,我开始思考是否要停滞编程,换一份完备不同的事情。
文章地址:

https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

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

剧透:直到本日,PHP 仍有很多糟糕的东西,例如许多核心功能仍旧存在不一致的方法署名,仍旧存在令人稠浊的配置设置,仍旧会有一些开拓者由于知识的缺少而导致写的代码很糟糕等等。

但是,本文我想把目光集中在 PHP 已经改进的地方上面,以及如何写出更加干净和易掩护的 PHP 代码。
大概你不会改变对 PHP 的意见,但很有可能,你会惊异于过去几年 PHP 的进步。

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

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

https://github.com/brendt/aggregate.stitcher.iohttps://spatie.be/open-source/packages回顾历史

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

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

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

PHP 详细的版本发布情形,可以查看:

https://www.php.net/supported-versions.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 运用框架以及一些相对而言较小的框架,如 Symfony 和 Laravel。
除此之后,还有 Zend、Yii、Cake、 Code Igniter 等等。

如果你想理解当代 PHP 开拓究竟是什么样子,那么就须要节制 Symfony 和 Laravel 中的一个,这 2 个框架都有弘大的生态系统,包含各种包和产品。
从管理面板和客户关系管理系统 (CRM) 到单独的包,从持续集成 (CI) 到性能监视工具,我们有无数的做事如 web 套接字做事器、行列步队管理器、支付集成等等。

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

衡量 PHP 生态系统目前状态的方法是看一看 Packagist,它是 PHP 紧张的包仓库。
在过去的韶光里,它呈现出了指数式增长的态势,每天 2500 万旁边的下载量,足以解释 PHP 生态系统已经不再是过去那种弱者了。

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

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

异步框架是指用 PHP 或其它措辞编写的框架和做事器,它们能够让用户运行真正异步的 PHP。
异步框架的例子包括:Swoole、Amp 和 ReactPHP。

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

其余,人们还谈到了内部邮件列表,在邮件列表中,PHP 核心开拓者谈论了 PHP 措辞的进一步发展,例如增加 libuv 到核心之中。
对付不熟习 libuv 的人来说,libuv 同 Node.js 用于实现其所有异步性的库千篇一律。

措辞本身

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

短闭包https://stitcher.io/blog/short-closures-in-php空合并运算符https://stitcher.io/blog/shorthand-comparisons-in-php#null-coalescing-operatorTraitshttps://www.php.net/manual/en/language.oop5.traits.php属性类型https://stitcher.io/blog/new-in-php-74#typed-properties-rfc扩散运算符https://wiki.php.net/rfc/argument_unpackingJIT 编译器https://wiki.php.net/rfc/jitFFIhttps://wiki.php.net/rfc/ffi匿名类https://www.php.net/manual/en/language.oop5.anonymous.php声明返回类型https://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration当代密码学https://wiki.php.net/rfc/libsodiumGeneratorshttps://wiki.php.net/rfc/generators其他https://www.php.net/ChangeLog-7.php

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

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

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

工 具

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

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

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

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

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

结束语

只管 PHP 还有很多缺陷和遗留问题,但我可以充满信心地说,我喜好利用它。
就我的履历来看,它可以创建可靠、可掩护和高质量的软件。
如果利用得当,PHP 对付 web 开拓来说是个非常棒的选择。

英文原文

https://stitcher.io/blog/php-in-2019

彩蛋一

新浪微博是海内利用 PHP 措辞的代表之一,前新浪微博首席架构师惠新宸便是 PHP 开拓组的核心成员。
2016 年,InfoQ 编辑约稿了新浪微博,分享了新浪微博的 PHP 7 升级实践以及选型思路。
文章年代虽然较为久远了,但背后的思路和实践细节依旧值得参考,感兴趣的同学可以在 InfoQ 公众号对话框回答关键词:PHP,获取文章详情。

请在 InfoQ "大众年夜众号对话框回答关键词,留言区回答无法吸收的哟!
彩蛋二

QCon 环球软件开拓大会广州站正在火热进行中,我们为 InfoQ 的读者汇总了大会 PPT,回答关键词:PPT,即可下载!