9102 年的 PHP

你还记得篇流行的博客文章《PHP:设计糟糕的分形》吗?我第一次读到它时,我在一个有不少遗留的 PHP 项目的糟糕地方工做。这篇文章让我以为我是否应该放弃,并去作与编程彻底不一样的事情。php

还好,我以后很快就换了工做,更重要的是,自从 5.x 版本以来,PHP 成功地进步了不少。今天,我在向那些再也不使用 PHP 编程,或者陷入遗留项目的人们致意。react

剧透:今天有些事情仍然很糟糕,就像几乎每种编程语言都有它的怪癖同样。许多核心功能仍然有不一致的调用方法,仍然有使人困惑的配置设置,仍然有许多开发人员在那里写蹩脚的代码 —— 由于他们必须如此,或是他们不知道更好的写法。linux

今天我想看看好的一面:让咱们关注已经发生变化的事情,以及编写干净而可维护的 PHP 代码的方法。在此以前,我想请你暂时搁置任何偏见。laravel

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

提早看结论

  • PHP 在积极地开发,每一年都有新版本
  • 自 PHP 5 时代以来的性能已经翻倍,若是不是三倍的话
  • 有一个很是活跃的框架、包和平台的生态系统
  • PHP 在过去几年中添加了许多新功能,而且这种语言在不断发展
  • 像静态分析这样的工具在过去几年中已经成熟,而且一直保持增加    更新:人们让我展现一些实际的代码。我以为这没问题!这是个人一个业余项目的源代码,用 PHP 和 Laravel 编写的;这里列出了咱们在办公室维护的几百个自由开源软件包。这二者都是现代 PHP 项目的好例子。

那让咱们开始吧。github

历史总结

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

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

通常来讲,每一个新版本都会在两年内获得积极支持,并再得到一年以上的“安全修复”。其目标是激励 PHP 开发人员尽量保持最新:例如,每一年进行小规模升级比在 5.4 到 7.0 之间跳转更容易。vim

能够在 这里 找到 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 应用程序框架,SymfonyLaravel,以及一些较小的应用程序框架。固然还有 Zend、Yii、Cake、Code Igniter 等等,可是若是你想知道现代 PHP 开发是怎么样的,这二者之一都是很好的选择。

这两个框架都有一个庞大的包和产品的生态系统。从管理面板和 CRM 到独立软件包,从 CI 到分析器,以及几个 Web 套接字服务器、队列管理器、支付集成等众多服务。老实说,要列出的内容太多了。

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

衡量 PHP 生态系统当前状态的一种方法是查看 Packagist,这是 PHP 主要的软件包存储库。它如今呈指数级增加。天天下载量达到了 2500 万次,能够说 PHP 生态系统已再也不是之前的小型弱势群体了。

请查看此图表,它列出一段时间内的软件包和版本数量变化。它也能够在 Packagist 网站上找到它。

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

这些是用 PHP 或其余语言编写的框架和服务器,容许用户运行真正的异步 PHP,这些例子包括 Swoole(创始人韩天峰),以及 AmpReactPHP

咱们已经进入了异步的世界,像 Web 套接字和具备大量 I/O 的应用程序之类的东西在 PHP 世界中已经变得很是重要。

在内部邮件列表里(PHP 核心开发人员讨论语言开发的地方)已经谈到了将 libuv 添加到核心。若是你还不知道 libuv:Node.js 全有赖它提供异步性。

语言自己

虽然还没有提供 asyncawait,但在过去几年中,PHP 语言自己已经有了不少改进。这是 PHP 中新功能的非详尽列表:

当咱们讨论语言功能时,咱们还要谈谈当今该语言的发展过程。虽然社区能够提出 RFC,可是得有一个活跃的志愿者核心团队才能推着它前进。

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

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

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

工具

除了核心自己,咱们看到过去几年中围绕它的工具备所增长。首先浮现于我脑海中的是静态分析器,好比由 Vimeo 建立 Psalm,以及 PhanPHPStan

这些工具将静态分析你的 PHP 代码并报告任何类型错误和可能的错误等。在某种程度上,它们提供的功能能够与 TypeScript 进行比较,可是如今这种语言不能转译transpiling,所以不支持使用自定义语法。

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

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

虽然这个思路已经在 JavaScript 世界中被证实了,但若是提供了适当的 IDE 和静态分析支持,它就能在 PHP 中工做了。这是一个很是有趣的想法,但必须发展起来才能称之为“主流”。

结语

尽管如此,你仍然能够将 PHP 视为一种糟糕的语言。虽然这种语言确定有它的缺点和背负了 20 年的遗产;但我能够放胆地说,我喜欢用它工做。

根据个人经验,我可以建立可靠、可维护和高质量的软件。我工做的客户对最终结果感到满意,“俺也同样”。

尽管仍然能够用 PHP 作不少乱七八糟的事情,但我认为若是明智和正确地使用的话,它是 Web 开发的绝佳选择。

你不一样意吗?让我知道为何!你能够经过 Twitter电子邮件 与我联系。


via: stitcher.io/blog/php-in…

做者:Brent 选题:lujun9972 译者:wxy 校对:wxy

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

相关文章
相关标签/搜索