作者 | Brent
译者 | 张兰月
这篇文案不在于处理关于 PHP 的那个永恒专题,而是想让你认识,PHP 在这些年的发展以及哪些值得关注的特性与发展状况。
之前,有一篇非常流行的博客文案是“PHP:哪些糟糕的设计”,第1次读到这篇博客的时候,我正在一个非常破旧的地区工作,处理着许多 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,就可下载!