外链论坛

 找回密码
 立即注册
搜索
查看: 19|回复: 1

2019年了,PHP已再亦不是当年那个“设计糟糕”的语言

[复制链接]

3003

主题

2万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139269
发表于 2024-10-5 10:50:11 | 显示全部楼层 |阅读模式

作者 | 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就可下载!

回复

使用道具 举报

3003

主题

2万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96066012
发表于 2024-10-19 09:21:36 | 显示全部楼层
楼主的文章深得我心,表示由衷的感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-8 23:05 , Processed in 0.661376 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.