你可以像以前一样对 PHP 自由吐槽。
虽然,你可能会对 PHP 在过去的几年里的一些改进感到惊异。

-- Brent(作者)

你还记得篇盛行的博客文章《 PHP:设计糟糕的分形 》吗?我第一次读到它时,我在一个有很多遗留的 PHP 项目的糟糕地方事情。
这篇文章让我以为我是否该当放弃,并去做与编程完备不同的事情。

linuxphp9102 年的 PHP Webpack

还好,我之后很快就换了事情,更主要的是,自从 5.x 版本以来,PHP 成功地进步了很多。
本日,我在向那些不再利用 PHP 编程,或者陷入遗留项目的人们存问。

剧透:本日有些事情仍旧很糟糕,就像险些每种编程措辞都有它的怪癖一样。
许多核心功能仍旧有不一致的调用方法,仍旧有令人困惑的配置设置,仍旧有许多开拓职员在那里写蹩脚的代码 —— 由于他们必须如此,或是他们不知道更好的写法。

本日我想看看好的一壁:让我们关注已经发生变革的事情,以及编写干净而可掩护的 PHP 代码的方法。
在此之前,我想请你暂时搁置任何偏见。

然后,你可以像以前一样对 PHP 自由吐槽。
虽然,你可能会对 PHP 在过去的几年里的一些改进感到惊异。
(LCTT 译注:说实话,我是真的感到吃惊)

提前看结论PHP 在积极地开拓,每年都有新版本自 PHP 5 时期以来的性能已经翻倍,如果不是三倍的话有一个非常生动的框架、包和平台的生态系统PHP 在过去几年中添加了许多新功能,并且这种措辞在不断发展像静态剖析这样的工具在过去几年中已经成熟,并且一贯保持增长 更新:人们让我展示一些实际的代码。
我以为这没问题!
这是我的一个业余项目的 源代码 ,用 PHP 和 Laravel 编写的; 这里 列出了我们在办公室掩护的几百个自由开源软件包。
这两者都是当代 PHP 项目的好例子。

那让我们开始吧。

历史总结

出于更好地衡量的目的,让我们快速回顾一下如今的 PHP 发布周期。
我们现在的 PHP 为 7.3,估量在 2019 年底为 7.4。
PHP 8.0 将是 7.4 之后的下一个版本。

自从 5.x 时期以来,核心团队试图保持每年发布一个版本的周期,并且他们在过去的四年中成功地做到了这一点。

一样平常来说,每个新版本都会在两年内得到积极支持,并再得到一年以上的“安全修复”。
其目标是勉励 PHP 开拓职员尽可能保持最新:例如,每年进行小规模升级比在 5.4 到 7.0 之间跳转更随意马虎。

可以在 这里 找到 PHP 韶光轴的活动概述。

末了,PHP 5.6 是最新的 5.x 版本,而 8.0 是当前的下一个大版本。
如果你想知道 PHP 6 发生了什么,你可以听听 PHP Roundtable 播客 。

理解了这个,让我们揭破一些关于当代 PHP 的常见误解。

PHP 的性能

早在 5.x 时期,PHP 的表现便是……嗯,均匀水平。
但是在 7.0 版本中,PHP 从头开始重写了核心部分,导致其性能提升了两到三倍!

但光是嘴说是不足的。
让我们来看看基准测试。
幸运的是,人们花了很多韶光对 PHP 性能进行了基准测试。
我创造 Kinsta 有一个很好的更新的测试列表。

自 7.0 升级以来,性能就一贯在提升而没有回退。
PHP Web 运用程序的性能可与其它措辞中的 Web 框架相提并论,乃至在某些情形下更好。
你可以看看这个 广泛的基准测试套件 。

当然 PHP 框架不会赛过 C 和 Rust,但它们比 Rails 或 Django 要好得多,并且与 ExpressJS 相称。

框架和生态系统

说到框架:PHP 可不仅仅是 WordPress。
让我见告你 —— 某些专业的 PHP 开拓职员:WordPress 绝不代表示代的 PHP 生态系统。

一样平常来说,有两个紧张的 Web 运用程序框架, Symfony 和 Laravel ,以及一些较小的运用程序框架。
当然还有 Zend、Yii、Cake、Code Igniter 等等,但是如果你想知道当代 PHP 开拓是怎么样的,这两者之一都是很好的选择。

这两个框架都有一个弘大的包和产品的生态系统。
从管理面板和 CRM 到独立软件包,从 CI 到剖析器,以及几个 Web 套接字做事器、行列步队管理器、支付集成等浩瀚做事。
诚笃说,要列出的内容太多了。

这些框架虽然适用于实际开拓。
如果你只是须要个内容管理系统(CMS),WordPress 和 CraftCMS 等平台就够了。

衡量 PHP 生态系统当前状态的一种方法是查看 Packagist,这是 PHP 紧张的软件包存储库。
它现在呈指数级增长。
每天下载量达到了 2500 万次,可以说 PHP 生态系统已不再因此前的小型弱势群体了。

请查看此图表,它列出一段韶光内的软件包和版本数量变革。
它也可以在 Packagist 网站 上找到它。

除了运用程序框架和 CMS 之外,我们还看到过去几年里异步框架的兴起。

这些是用 PHP 或其他措辞编写的框架和做事器,许可用户运行真正的异步 PHP,这些例子包括 Swoole (创始人韩天峰),以及 Amp 和 ReactPHP 。

我们已经进入了异步的天下,像 Web 套接字和具有大量 I/O 的运用程序之类的东西在 PHP 天下中已经变得非常主要。

在内部邮件列表里(PHP 核心开拓职员谈论措辞开拓的地方)已经谈到了 将 libuv 添加到核心 。
如果你还不知道 libuv:Node.js 全有赖它供应异步性。

措辞本身

虽然尚未供应 async 和 await,但在过去几年中,PHP 措辞本身已经有了很多改进。
这是 PHP 中新功能的非详尽列表:

短闭包 (箭头函数)Null 合并操作符 (??)Trait (一种代码重用办法)属性类型展开操作符 (参数解包 ...)JIT 编译器 (即时编译器)FFI (外部函数接口)匿名类返回类型声明当代化的加密支持天生器等等

当我们谈论措辞功能时,我们还要谈谈当今该措辞的发展过程。
虽然社区可以提出 RFC,但是得有一个生动的志愿者核心团队才能推着它提高。

接下来,这些 RFC 将在“内部”邮件列表中进行谈论,这个邮件列表也可以 在线阅读 。
在添加新的措辞特性之前,必须进行投票。
只有得到了至少 2/3 多数赞许的 RFC 才能进入核心。

可能有大约 100 人能够投票,但不须要每个人对每个 RFC 进行投票。
核心团队的成员当然可以投票,他们是掩护代码库的人。
除了他们之外,还有一群人从 PHP 社区中被单独挑选出来。
这些人包括 PHP 文档的掩护者,对 PHP 项目整体有贡献的人,以及 PHP 社区中的精彩开拓职员。

虽然大多数核心开拓都是在志愿的根本上完成的,但个中一位核心 PHP 开拓职员 Nikita Popov 最近受雇于 JetBrains 全职从事于 PHP 措辞的开拓。
另一个例子是 Linux 基金会最近决定 投资 Zend 框架 。
像这样的雇佣和收购确保了 PHP 未来发展的稳定性。

工具

除了核心本身,我们看到过去几年中环绕它的工具有所增加。
首先浮现于我脑海中的是静态剖析器,比如由 Vimeo 创建 Psalm ,以及 Phan 和 PHPStan 。

这些工具将静态剖析你的 PHP 代码并报告任何类型缺点和可能的缺点等。
在某种程度上,它们供应的功能可以与 TypeScript 进行比较,但是现在这种措辞不能 转译(transpiling),因此不支持利用自定义语法。

只管这意味着我们须要依赖 docblocks,但是 PHP 之父 Rasmus Lerdorf 确实提到了 添加静态剖析引擎 到核心的想法。
虽然会有很多潜力,但这是一项艰巨的任务。

说到转译,以及受到 JavaScript 社区的启示;他们已经努力在用户领域中扩展 PHP 语法。
一个名为 Pre 的项目正是如此:许可将新的 PHP 语法转译为普通的 PHP 代码。

虽然这个思路已经在 JavaScript 天下中被证明了,但如果供应了适当的 IDE 和静态剖析支持,它就能在 PHP 中事情了。
这是一个非常有趣的想法,但必须发展起来才能称之为“主流”。

结语

只管如此,你仍旧可以将 PHP 视为一种糟糕的措辞。
虽然这种措辞肯定有它的缺陷和背负了 20 年的遗产;但我可以放胆地说,我喜好用它事情。

根据我的履历,我能够创建可靠、可掩护和高质量的软件。
我事情的客户对终极结果感到满意,“俺也一样”。

只管仍旧可以用 PHP 做很多乱七八糟的事情,但我认为如果明智和精确地利用的话,它是 Web 开拓的绝佳选择。

你不同意吗?让我知道为什么!
你可以通过 Twitter 或 电子邮件 与我联系。

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

作者: Brent 选题: lujun9972 译者: wxy 校正: wxy

本文由 LCTT 原创编译, Linux中国 名誉推出

点击“理解更多”可访问文内链接