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

2022-12-09 0 1,095

2019年了,PHP已不再是当年那个“设计糟糕”的语言 译者 | Brent 翻译者 | 其妻月 这篇该文不在于解决关于 PHP 的这个不朽热门话题,而是想让你了解,PHP 在这些年的重大进展和这些值得称赞关注的优点与产业发展现况。

之前,有一则十分盛行的博客该文是“PHP:这些差劲的结构设计”,第一次写到这篇网志的时候,我正在两个十分破烂的地方性组织工作,处理着许多 PHP 遗留下来工程项目。这篇网志对我刺痛基盘,我开始思索是否要暂停程式结构设计,换这份完全不同的组织工作。该文门牌号:

https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

幸运地的是,很快我就换了这份组织工作,而 PHP 在 5.X 版后又有了许多捷伊改进。那时,我要向这些无须使用 PHP 程式结构设计,或者陷于遗留下来工程项目的人致意。

UX21LI2677E:直到那时,PHP 仍有许多差劲的东西,例如许多核心理念功能依然存有不完全一致的方法亲笔签名,依然存有更让人混为一谈的实用性增设,依然会有一些开发者因为科学知识的缺少而导致写的标识符很差劲之类。

但是,责任编辑我想把注意力集中在 PHP 已经改良的地方性下面,和如何写下更加整洁Seiches保护的 PHP 标识符。也许你不会改变对 PHP 的观点,但很有可能,你会吃惊于往后一两年 PHP 的不断进步。

要   点

PHP 每年单厢推出两个捷伊版;

自 PHP 5 代后,其操控性不断提升;

有架构、包和网络平台组成的活耀生态系;

往后一两年间,PHP 加进了许多捷伊优点,且现在仍在持续重构;

许多辅助工具如动态解析器也愈发成形,未来也将继续产业发展。

预览:许多人希望我能够展现一下实际标识符,这是我其中两个非职业工程项目的源标识符,它是用 PHP 和 Laravel 写的,另外还有两个是我们在服务部负责保护的上千个 OSS 包的条目。

https://github.com/brendt/aggregate.stitcher.io

https://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 网站上列出了往后的包和版本数量:

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

除了应用架构和内容管理系统 (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-operator

Traits

https://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_unpacking

JIT 编译器

https://wiki.php.net/rfc/jit

FFI

https://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/libsodium

Generators

https://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

彩蛋二

QCon 全球软件开发大会广州站正在火热进行中,我们为 InfoQ 的读者汇总了大会 PPPT,即可下载!

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

今日荐文

点击下方图片即可阅读

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

90 亿美元的“近十年第一版权案”,谷歌、甲骨文打到美国最高法院,Java 未来如何自处?

今年的技术热点热门话题包括中台、ToB 转型、机器学习等。对于两个举办了 8 年的技术会议,ArchSummit 全球架构师峰会依然紧盯前沿技术趋势和最佳实践用例,邀请谷歌、苹果、阿里等国内外有技术实力的专家来分享首发的技术成果。

谷歌 – 多云环境使用 K8s/Istio/Spinnaker 管理应用的最佳实践

阿里巴巴 – 中台技术架构实践与思索

字节跳动 – 容器化场景下的操控性优化实践

百度 – 春晚极限压力场景下的运维解决方案

了解详情,目前 9 折购票期,团购优惠力度更大,感兴趣联系票务经理灰灰 17326843116

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

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

点个在看少个 bug 👇

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务