我想将一个项目升级到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覆盖校长的深度,我打算很快阅读。