作者 | Brent
译者 | 张兰月
这篇文章不在于办理关于 PHP 的那个永恒话题,而是想让你理解,PHP 在这些年的进展以及那些值得关注的特性与发展现状。
之前,有一篇非常盛行的博客文章是“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,即可下载!