照片由 Matteo del Piano 在 Unsplash 上拍摄
在不断发展的 PHP 开发世界中,保持代码库干净、最新且高效至关重要。这就是 Rector PHP 发挥作用的地方。如果您一直想知道如何使用 Rector PHP、如何安装它或者 Rector PHP 到底是什么,那么这份综合指南非常适合您。我们将引导您了解基础知识,提供详细的 Rector PHP 教程,并提供有关 PHP Rector 以及如何有效使用它的见解。读完本文后,您将牢牢掌握 Rector PHP 以及它如何增强您的开发工作流程。
Rector 于 2020 年启动,但直到 2024 年才发布 1.0 版本。它是一个对代码库执行静态分析的命令行工具。根据该分析可以应用更改。我想一个很好的例子是,如果你的代码库充满了 array() 调用,而这现在被认为是一种旧的做法,现在被 [] 短数组语法取代。
通过代码库来替换它是很乏味的。我们可以使用一个简单的查找和替换工具,但是如果有一个 array() 封装了一个字符串或一个不应更改的注释,该怎么办?现在我们必须检查每个被替换的实例。
这类问题正是Rector所擅长的。相反,Rector 能够查看代码并明确知道它是否是要替换的数组。
你可能会问,PHP CS Fixer 也可以做到这一点,这是事实。但 Rector 还让 PHPStan 在后台工作,不仅可以识别语法,还可以分析类型。这意味着 Rector 可以检测某个类何时具有特定的父类、变量何时为特定类型或函数的预期返回类型。给予它更大的范围来对代码库进行大量更改。
这对于经验丰富的 PHP 开发人员来说似乎是显而易见的,但有两种主要方法,这实际上取决于您想要如何使用 Rector。
如果您想使用 Rector 作为持续集成的一部分,那么通过 Composer 将不同的 Rector 安装到您的项目中是有意义的。
composer require --dev rector/rector
但是,如果您想在单个或多个项目上尝试使用 Rector 来执行升级,那么最好使用
全局安装 Rector
composer global require rector/rector
无论您选择哪一步,下一步都是在项目的根目录中创建一个配置,并包含所有包含您希望升级的 PHP 代码的文件夹。当然,这不包括供应商文件夹,因为我们不想修改它。
这就是 Laravel 项目的配置可能如下所示:
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true);
与上一节一样,使用 Rector 可以根据您想要如何使用它来确定。校长通过选择规则来应用变更。这与 PHP CS Fixer 相同。这些规则都会检测问题,然后尝试解决它们旨在解决的问题。
如果我们希望以持续集成的方式使用 Rector,因为我们希望使用所有代码在开发时尽可能优化,我们可能只使用一组特定的规则。
Rector 有一组规则,通常被描述为死代码或代码质量,分别删除代码或增强和优化。坚持使用这些设置是非常有利的,因为我们可以确信它们在大多数情况下都有效。但您绝对应该意识到 Rector 编写代码的方式从来都不是完美的。通常,在编写规则时,它们可能会涵盖典型场景,并且可能会遗漏一些在您的代码库中找到的情况。这可能会导致代码损坏。
如果您想使用 Rector,您绝对应该为您的应用程序编写测试。没有它们,Rector 很容易导致引入错误,而这些错误在成为问题之前您不会发现。
使用 Rector 时要考虑的另一件事是您应该使用像 PHP CS Fixer 这样的 linting 工具。 Rector 不考虑空格、方法调用之间的空格和换行符及其参数等。在 Rector 应用其修复后,使用 linting 工具应该将代码格式保持为您期望的标准。
现在我们已经安装了 Rector,准备尝试一下,让我们尝试应用一个规则。让我们从更新之前制作的配置文件开始。
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->withRules([ ListToArrayDestructRector::class, ]);
在此配置中,我们将替换列表的使用,从而使用数组重组。我们期望做出的改变如下:
-list($a, $b) = ['a', 'b']; [$a, $b] = ['a', 'b'];
现在我们可以通过执行 Rector 的试运行来测试此配置。
rector --dry-run
如果一切顺利,我们现在应该看到一个输出,其中包含每个文件的所有更改的差异,以及进行更改的规则列表。我们的配置仅列出一条规则,因此仅应用一条规则,但如果添加更多规则,我们将在此处看到一个或多个规则的列表。
现在是审查更改并确保规则按预期执行的好时机。一旦我们满意,我们就可以再次运行 Rector。如果没有试运行标志,更改将写入文件。
rector
完成后,我们应该运行我们最喜欢的 linting 工具,然后运行我们的测试。就是这样。我们现在已经使用了 Rector。
Rector PHP 是一个功能强大的工具,可以通过自动化代码重构并确保您的代码库保持干净和现代来显着增强您的 PHP 开发工作流程。通过了解 Rector PHP 是什么、学习如何安装它以及掌握如何有效使用它,您可以利用其功能来简化代码更新、提高代码质量并降低代码感觉像是“遗留”项目的风险。无论您是将 Rector 集成到持续集成管道中还是将其用于大规模代码库升级,Rector 都是任何希望保持高标准的卓越代码的 PHP 开发人员不可或缺的资产。
如果您想进一步了解 Rector,我建议您访问 https://getrector.com/。
我是 Peter Fox,一位在英国使用 Laravel 的软件开发人员。感谢您阅读我的文章,我还有更多内容可以阅读 https://articles.peterfox.me。我现在也是 GitHub 上的赞助者。如果您想鼓励我写更多这样的文章,请考虑捐赠一笔小额一次性捐款。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3