这是我第四次每年写一篇“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 中的静态分析正在显著增长。

如果您只想快速了解为什么静态分析在 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

2022 年的 PHP–激动人心的时代即将到来,让我们来看看现代的 PHP
标签: