发布于 2026-01-06 2 阅读
0

从 Rector PHP 开始:利用自动化改进您的 PHP 代码

从 Rector PHP 开始:利用自动化改进您的 PHP 代码

保持代码的简洁高效对于项目成功至关重要。Rector PHP 应运而生,成为一款强大的工具,为开发者提供了一条轻松实现代码转换和增强的途径。Rector
PHP 是一款开源的 PHP 自动化工具,它简化了代码升级、重构和现代化流程,为开发者及其项目带来显著的效益。

为什么 Rector PHP 很重要

在介绍如何安装、配置和运行 Rector PHP 之前,让我们先来看看为什么使用 Rector PHP 对于编写 PHP 代码至关重要。

代码重构

Rector PHP 可自动执行繁琐的代码重构任务,使开发人员能够专注于构建新功能和改进现有功能。它将遗留代码转换为现代化的、易于维护的结构,从而提高代码可读性并减少技术债务。
例如:

  • 删除未使用的变量赋值;
  • 拆分if语句,当if条件总是中断执行流程时;
  • 给函数添加返回类型void,就像没有返回值一样;
  • 根据严格的标量返回值更改返回类型—— string,,intfloatbool
  • 从已分配类型添加类型属性
  • ……以及更多……

使用 Rector PHP 重构您的 PHP 代码

项目间的标准化

如果您维护多个开源项目,那么在软件开发中保持项目间的一致性至关重要。Rector
PHP 确保所有项目都采用统一的编码标准,从而构建出凝聚力强、易于理解的代码库。这种标准化简化了开发人员之间的协作,并有助于新成员更顺利地融入团队。

Rector 的配置以及您希望在代码中应用的规则列表都详细记录在rector.php配置文件中。您可以使用命令创建配置文件rector,既可以从头开始创建,也可以从其他项目中复制。就我而言,我有一个rector.php可以在多个项目中重复使用的文件。

高效升级

适配最新的 PHP 版本并采用新的语言特性可能非常耗时。Rector PHP 通过自动处理必要的代码更改来简化这一过程,从而提高升级效率并降低出错风险。

例如,如果您想确保使用 PHP 8.3 的新特性,可以LevelSetList::UP_TO_PHP_83在配置中进行设置。Rector 随后会更新您的代码,使其包含 PHP 8.3 提供的新特性。这包括为常量添加类型、为重写方法引入 override 属性等等。

使用 Rector PHP 升级您的代码

提升代码质量

Rector PHP 通过解决常见问题、强制执行最佳实践以及识别代码中潜在的弱点,积极致力于提高代码质量。这使得代码库更加健壮和安全,并符合不断发展的现代 PHP 开发标准。

使用 Rector PHP 提升代码质量

节省时间和成本

自动化重复性任务不仅可以提高开发速度,还能降低手动代码维护的成本。Rector PHP 让开发人员能够更有效地分配时间,专注于对项目成功更有价值的任务。

将 Rector PHP 添加到您的项目中

您可以使用composer命令安装 Rector PHP。
由于 Rector 是一个开发包,因此您必须使用 `--dev` 选项。

composer require rector/rector --dev
Enter fullscreen mode Exit fullscreen mode

安装好 Rectory PHP 后,即可运行它,方法是执行 `locate` 命令进入vendor/bin目录:

vendor/bin/rector
Enter fullscreen mode Exit fullscreen mode

首次在项目中启动 Rector PHP 时,它会检测 rector.php 文件是否存在。除非您已经创建过该rector.php文件,否则该rector.php命令会自动创建rector.php配置文件。

Rector PHP 创建配置文件

Rector 会根据项目目录和 composer.json 文件中使用的 PHP 版本自动定义基本配置。
您可以通过配置文件定义要分析的路径:

$rectorConfig->paths([
    __DIR__ . '/src',
]);
Enter fullscreen mode Exit fullscreen mode

您还可以通过配置文件设置一条规则,例如:

$rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
Enter fullscreen mode Exit fullscreen mode

或者制定一套规则:

$rectorConfig->sets([
    LevelSetList::UP_TO_PHP_82
]);
Enter fullscreen mode Exit fullscreen mode

如果您想了解更多规则,可以查看此页面:
https://github.com/rectorphp/rector/blob/main/docs/rector_rules_overview.md

如您所见,我们有很多规则可供选择。
为了方便您开始使用 Rector,您可以从一些预设规则集入手。我通常使用以下这些规则集:

$rectorConfig->sets([
    SetList::DEAD_CODE,
    SetList::EARLY_RETURN,
    SetList::TYPE_DECLARATION,
    SetList::CODE_QUALITY,
    SetList::CODING_STYLE,
    LevelSetList::UP_TO_PHP_82
]);
Enter fullscreen mode Exit fullscreen mode

在上面的配置中,我使用了规则进行修复:

我的完整基础rector.php文件内容如下:

<?php

declare(strict_types=1);

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

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

    $rectorConfig->sets([
        SetList::DEAD_CODE,
        SetList::EARLY_RETURN,
        SetList::TYPE_DECLARATION,
        SetList::CODE_QUALITY,
        SetList::CODING_STYLE,
        LevelSetList::UP_TO_PHP_82
    ]);
};
Enter fullscreen mode Exit fullscreen mode

在日常使用中,我建议移除现有UP_TO_PHP_82规则集,仅UP_TO在需要升级规则集时才使用该规则,具体方法请参见此处:https://getrector.com/blog/5-common-mistakes-in-rector-config-and-how-to-avoid-them

现在我们已经安装了 Rector PHP 并设置了最小配置,我们可以执行 Rector PHP 了。

启动 Rector PHP

现在,您可以运行该rector命令,并定位到以下vendor/bin目录:

vendor/bin/rector --dry-run
Enter fullscreen mode Exit fullscreen mode

我们使用该--dry-run选项只是为了查看根据配置文件中定义的规则可能发生的变化。如果要将更改应用到源代码文件,我们可以省略该--dry-run选项来执行 rector 命令:

vendor/bin/rector
Enter fullscreen mode Exit fullscreen mode

文件将根据既定规则进行更改。

执行校长规则

如果想要获取 JSON 格式的执行报告,可以使用以下--output-format=json选项:

vendor/bin/rector --output-format=json --dry-run
Enter fullscreen mode Exit fullscreen mode

你可以将这两个output-format选项结合起来使用dry-run

如果您正在使用其他质量管理工具,例如静态代码分析器和代码风格修复器,您可能需要在一个集中位置(例如 composer 文件中的 scripts 部分)来协调和管理执行配置。

在 Composer 中设置执行

如果需要,您可以在 Composer 文件中创建一个脚本。
这对于想要加入项目的其他人很有用,他们可以了解通常会执行哪些命令。
以下是该文件中的一段摘录composer.json

"scripts": {
    "cs-fix": "pint",
    "rector-fix": "rector",
    "rector-preview": "rector --dry-run",
    "rector-ci": "rector --dry-run --no-progress-bar"
},
"scripts-descriptions": {
    "cs-fix": "Fixing the Code Style according to PER standards",
    "rector-fix": "Fixing the code according to the Rector Rules",
    "rector-preview": "Showing the suggested changes from Rector",
    "rector-ci": "Executing Rector in a CI workflow"
}
Enter fullscreen mode Exit fullscreen mode

现在你可以执行composer run rector-fix命令来启动 rector 了。

作曲家运行

我使用 Rector PHP 的个人工作流程

使用 Rector PHP 需要根据开发者在配置中设置的规则对代码库进行更改。尽管 Rector PHP 会自动执行这些更改,但开发者充分了解每一次修改仍然至关重要。以下是我推荐的流程(基于我的经验,但您可以根据自身需求和实践进行调整):

  • 细粒度 Git 提交:使用 Git 管理您的源代码,并以细粒度的方式提交更改。这样,如果 Rector 的规则过于激进,您可以恢复到安全状态。
  • 全面测试:在 Rector 应用更改后,请测试代码以避免出现回归问题。如果规则过于严格,您可以使用 Git 回滚更改。
  • 预运行:首先执行预运行,以了解所有更改。预运行报告提供​​清晰的概览,突出显示源代码差异并展示应用的规则。
  • 规则子集配置:如果试运行期间应用的规则过多,可以考虑调整配置。先从一部分规则开始,进行初始运行,然后逐步添加其他规则。这种迭代方法可以帮助您仔细控制每条规则的影响,并就代码更改做出明智的决策。

概要

总而言之,Rector PHP 是 PHP 开发领域的变革者,它能够自动化任务、提升代码质量并简化迁移。Rector PHP 注重效率和最佳实践,对于寻求精简工作流程和增强代码库的开发者而言,它是一款不可或缺的工具。体验 Rector PHP 带来的自动化代码转换优势:

X 上见https://twitter.com/RmeetsH或在Mastodon上见

文章来源:https://dev.to/robertobutti/starting-with-rector-php-improving-your-php-code-with-automation-1ahd