这是我第四次每年写一篇“PHP in 20XX”的帖子,我必须承认我从来没有像今年这样兴奋过:我们已经看到 PHP 添加了一些很棒的新特性,比如注解,枚举、属性提升和纤程;最重要的是,静态分析社区正在取得巨大进步,我个人最喜欢的功能是 PhpStorm 现在在编写代码时支持泛型。
激动人心的时代即将到来,让我们来看看现代 PHP!
#PHP 8.1
我忍不住从一个多月前发布的最新 PHP 版本开始列出这个列表。我的主要项目已经准备好在生产环境中在 PHP 8.1 上运行,我必须承认我对此感到非常兴奋。您可能不会期望它会出现在一个次要版本中——没有重大的更改,只添加了弃用通知——但 PHP 8.1 带来了一些非常酷的特性。这是我个人认为的前三名。
枚举现在内置于PHP语言中:
enum Status
{
case draft;
case published;
case archived;
public function color(): string
{
return match($this)
{
Status::draft => 'grey',
Status::published => 'green',
Status::archived => 'red',
};
}
}
我们可以在初始化器中使用new
关键字:
class PostStateMachine
{
public function __construct(
private State $state = new Draft(),
) {
}
}
而且,当然,还有只读属性:
class PostData
{
public function __construct(
public readonly string $title,
public readonly PostState $state,
public readonly DateTimeImmutable $publishedAt,
) {}
}
这与 PHP 8.0 的提升属性相结合,形成了一些非常干净的数据类。只是为了可视化显示其差异,以上是用 PHP 5.6 编写的具有相同功能的类:
class PostData
{
/** @var string */
private $title;
/** @var State */
private $state;
/** @var \DateTimeImmutable|null */
private $publishedAt;
/**
* @param string $title
* @param State $state
* @param \DateTimeImmutable|null $publishedAt
*/
public function __construct(
$title,
$state,
$publishedAt = null
) {
$this->title = $title;
$this->state = $state;
$this->publishedAt = $publishedAt;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @return State
*/
public function getState()
{
return $this->state;
}
/**
* @return \DateTimeImmutable|null
*/
public function getPublishedAt()
{
return $this->publishedAt;
}
}
你明白我为什么兴奋吗?PHP 在每个版本中都获得了这些很棒的语法改进。写PHP只会越来越有趣!当然,现代 PHP 中添加了更多功能,如果您想快速了解一下,请查看我的 3 分钟视频,或者您可以滚动继续阅读 — 2022 年 PHP 将更加激动人心!
https://www.youtube.com/embed/W3p8BGeiTwQ
#静态分析
我已经简单地提到过:PHP 中的静态分析正在显著增长。
- 像 Laravel 这样的框架越来越多地采用静态类型(编写代码和文档块的唯一目的是帮助静态分析);
- PhpStorm添加了对泛型类型的支持,如果您可以编写泛型代码并让您的 IDE在您编写它时理解它,那将是一件大事;
- PhpStan和psalm在不断增长;
- 我自己的关于静态分析的时事通讯系列在 1500 多名参与者中做得很好,越来越多的人对这个话题感兴趣。
如果您只想快速了解为什么静态分析在 PHP 中很重要,以及为什么我对此如此兴奋,您可以查看这篇博文:“我们不需要运行时类型检查”。
#PHP 基金会
两个月前,PHP世界得到了一些相当大的消息,甚至可能是2021年最大的新闻:Nikita,最活跃的核心维护者之一,正在辞职到LLVM去工作,但与此同时,还有一项由几家大公司支持的新举措,最终使核心开发可持续。
简而言之,PHP 基金会是一个非营利组织,其唯一目标是资助 PHP 核心开发。该计划由 JetBrains 推动,他们已经向该项目承诺了 100,000 美元。与其他许多人一样,他们现在已经筹集了 329,920.75 美元;一个好的开始!
这笔钱用于资助核心开发者,并为以前无法从事PHP工作的人打开了大门。您可以在JetBrains 的博客文章中阅读有关基金会使命和目标的更多信息。
#生态系统
就像每年一样,我不能不提到 Packagist,现在有超过 300 万个注册版本和超过 300.000 个包。如您所见,PHP生态系统不断发展壮大,2022 年也不例外。
哦,顺便说一句,就在最近,Packagist 通过了处理超过 500 亿次安装的里程碑。恭喜Packagist!
#异步 PHP
异步社区中的一个令人兴奋的发展是,来自 Amp 和 ReactPHP(两个主要的异步参与者)的开发人员齐心协力制作了一个与fiber兼容的事件循环实现,称为Revolt PHP。
与整个社区相比,异步 PHP 仅被一小部分人使用;但是仍然很高兴看到异步社区变得强大并拥抱现代 PHP。
#无服务器 PHP
我一直在关注的一个有趣的发展是无服务器 PHP。我的好友Matthieu Napoli的使命是让 PHP 开发人员了解这种相对较新的 PHP 使用方式,而且他似乎做得很好。您可以查看Bref,他的开源项目使无服务器 PHP 变得简单,或者查看他在 2022 年关于无服务器 PHP 的课程。
我自己没有任何用例,但我知道越来越多的人在生产环境中运行无服务器 PHP,所以它绝对值得关注。
#期待
那么今年呢?我很期待看到静态分析的发展方向,并且对与 PhpStorm 更好地集成感到特别好奇。我发现实时静态分析——在你编写代码时进行静态分析——在开发阶段本身提供了更多的价值。
现在我有点担心Nikita已经下台了。他绝对不是唯一能够从事 PHP 核心工作的人,但在过去的几年中,他在 PHP 8.0 和 8.1 方面做了大量工作。我希望 PHP 基金会能尽快跟上步伐,明年有足够多的核心开发人员有时间从事 PHP 工作。PHP 8.2已经在开发中,虽然还没有起草很多 RFC。
我不认为2022年将是PHP最令人兴奋的一年,而是增加稳定性的一年。这没什么错。
这些是 2021 年对我个人而言最突出的事情,也让我对 2022 年的 PHP 感到兴奋:很棒的新语法、得益于 PHP 基金会的核心开发稳定性、静态分析变得越来越强大,以及许多整个社区的有趣发展。
原文:https://stitcher.io/blog/php-in-2022