将您的项目升级为PHP 8.2,并使用Rector升级
#教程 #重构 #php #自动化

我想将一个项目升级到PHP 8.2,并认为我可以使用Rector

不仅是这种情况,而且我也完全低估了它的容易。

什么是校长?

Rector是使用PHP编写的免费和开源工具,使您可以自动化各种重构任务。它分析您的代码并应用您在其configuration中指定的任何rules。也有可能create your own rules

如何将您的项目升级到PHP 8.2

首先,安装校长作为发展依赖性:

$ composer require --dev rector/rector

然后,在项目的根部生成rector.php配置文件:

$ ./vendor/bin/rector init

打开该文件并用以下内容替换其内容:

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->sets([LevelSetList::UP_TO_PHP_82]);
};

执行干式运行以检查校长即将进行的变化(以下分析以app文件夹为例):

$ ./vendor/bin/rector process app --dry-run

如果您对它们感到满意,请应用这些更改:

$ ./vendor/bin/rector process app

您还可以直接指定在配置文件中分析的路径:

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->paths([
        __DIR__ . '/app',
        // ...
    ]);

    $rectorConfig->sets([LevelSetList::UP_TO_PHP_82]);
};

然后简单地运行:

$ ./vendor/bin/rector process

引擎盖下发生了什么?

在上面,UP_TO_PHP_82常数不仅意味着,不仅应用了从php 8.1升级到php 8.2的规则,而且从php 8.0到php 8.1的规则也是如此,以及所有其他版本的规则,以及所有其他版本''降至PHP 5.2 。

换句话说,您可以使用Rector提供的预定义规则集将整个代码库从PHP 5.2带到最新版本。

但是还有更多 - 您可以检查可用的规则及其描述here,它们超出了与版本相关的更改。而且,如前所述,如果需要的话,您也可以create your own rules

结束思想

校长已经在我的雷达上了一段时间,我什至以前使用过几次,但我仍然对它的功能感到惊讶。

最近似乎越来越多的吸引力,以及其他静态分析工具(例如PHPStan),但它仍然非常不足。原因之一可能是开发人员没有意识到其潜力,上面只是一种品味。

有一个book覆盖校长的深度,我打算很快阅读。