”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 掌握代码重构:使用 Rector PHP 的完整指南

掌握代码重构:使用 Rector PHP 的完整指南

发布于2024-08-30
浏览:151

Mastering Code Refactoring: A Complete Guide to Using Rector PHP
照片由 Matteo del Piano 在 Unsplash 上拍摄

PHP 校长简介

在不断发展的 PHP 开发世界中,保持代码库干净、最新且高效至关重要。这就是 Rector PHP 发挥作用的地方。如果您一直想知道如何使用 Rector PHP、如何安装它或者 Rector PHP 到底是什么,那么这份综合指南非常适合您。我们将引导您了解基础知识,提供详细的 Rector PHP 教程,并提供有关 PHP Rector 以及如何有效使用它的见解。读完本文后,您将牢牢掌握 Rector PHP 以及它如何增强您的开发工作流程。

PHP 校长是什么?

Rector 于 2020 年启动,但直到 2024 年才发布 1.0 版本。它是一个对代码库执行静态分析的命令行工具。根据该分析可以应用更改。我想一个很好的例子是,如果你的代码库充满了 array() 调用,而这现在被认为是一种旧的做法,现在被 [] 短数组语法取代。

通过代码库来替换它是很乏味的。我们可以使用一个简单的查找和替换工具,但是如果有一个 array() 封装了一个字符串或一个不应更改的注释,该怎么办?现在我们必须检查每个被替换的实例。

这类问题正是Rector所擅长的。相反,Rector 能够查看代码并明确知道它是否是要替换的数组。

你可能会问,PHP CS Fixer 也可以做到这一点,这是事实。但 Rector 还让 PHPStan 在后台工作,不仅可以识别语法,还可以分析类型。这意味着 Rector 可以检测某个类何时具有特定的父类、变量何时为特定类型或函数的预期返回类型。给予它更大的范围来对代码库进行大量更改。

如何安装 PHP 校长

这对于经验丰富的 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);

PHP Rector:如何有效使用它

与上一节一样,使用 Rector 可以根据您想要如何使用它来确定。校长通过选择规则来应用变更。这与 PHP CS Fixer 相同。这些规则都会检测问题,然后尝试解决它们旨在解决的问题。

如果我们希望以持续集成的方式使用 Rector,因为我们希望使用所有代码在开发时尽可能优化,我们可能只使用一组特定的规则。

Rector 有一组规则,通常被描述为死代码或代码质量,分别删除代码或增强和优化。坚持使用这些设置是非常有利的,因为我们可以确信它们在大多数情况下都有效。但您绝对应该意识到 Rector 编写代码的方式从来都不是完美的。通常,在编写规则时,它们可能会涵盖典型场景,并且可能会遗漏一些在您的代码库中找到的情况。这可能会导致代码损坏。

如果您想使用 Rector,您绝对应该为您的应用程序编写测试。没有它们,Rector 很容易导致引入错误,而这些错误在成为问题之前您不会发现。

使用 Rector 时要考虑的另一件事是您应该使用像 PHP CS Fixer 这样的 linting 工具。 Rector 不考虑空格、方法调用之间的空格和换行符及其参数等。在 Rector 应用其修复后,使用 linting 工具应该将代码格式保持为您期望的标准。

Rector PHP 分步教程

现在我们已经安装了 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

如果一切顺利,我们现在应该看到一个输出,其中包含每个文件的所有更改的差异,以及进行更改的规则列表。我们的配置仅列出一条规则,因此仅应用一条规则,但如果添加更多规则,我们将在此处看到一个或多个规则的列表。

Mastering Code Refactoring: A Complete Guide to Using Rector PHP

现在是审查更改并确保规则按预期执行的好时机。一旦我们满意,我们就可以再次运行 Rector。如果没有试运行标志,更改将写入文件。

rector

完成后,我们应该运行我们最喜欢的 linting 工具,然后运行我们的测试。就是这样。我们现在已经使用了 Rector。

结论:使用 Rector 促进 PHP 开发

Rector PHP 是一个功能强大的工具,可以通过自动化代码重构并确保您的代码库保持干净和现代来显着增强您的 PHP 开发工作流程。通过了解 Rector PHP 是什么、学习如何安装它以及掌握如何有效使用它,您可以利用其功能来简化代码更新、提高代码质量并降低代码感觉像是“遗留”项目的风险。无论您是将 Rector 集成到持续集成管道中还是将其用于大规模代码库升级,Rector 都是任何希望保持高标准的卓越代码的 PHP 开发人员不可或缺的资产。

如果您想进一步了解 Rector,我建议您访问 https://getrector.com/。

我是 Peter Fox,一位在英国使用 Laravel 的软件开发人员。感谢您阅读我的文章,我还有更多内容可以阅读 https://articles.peterfox.me。我现在也是 GitHub 上的赞助者。如果您想鼓励我写更多这样的文章,请考虑捐赠一笔小额一次性捐款。

版本声明 本文转载于:https://dev.to/peter_fox/mastering-code-refactoring-a-complete-guide-to-using-rector-php-hp1?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • ``STD :: LANEDER'如何解决工会中的const成员的编译器优化问题?
    ``STD :: LANEDER'如何解决工会中的const成员的编译器优化问题?
    Unveiling the Essence of Memory Laundering: A Deeper Dive into std::launderIn the realm of C standardization, P0137 introduces std::launder, a funct...
    编程 发布于2025-03-25
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-03-25
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-03-25
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-03-25
  • 如何将熊猫数据框中的逗号分隔字符串分为单独的行?
    如何将熊猫数据框中的逗号分隔字符串分为单独的行?
    在pandas dataframes中将comma-pandas dataframe strings拆分为单独的行使用series.explode()或dataframe.explode():将CSV字符串转换为列表:如果目标完全可以将CSV字符串转换为列表,则可以通过使用str.split()。...
    编程 发布于2025-03-25
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-03-25
  • WordPress中的下一个/上一个文章导航
    WordPress中的下一个/上一个文章导航
    在帖子之间带有“ next/上一个/上一个”链接的帖子是许多博客和站点具有的功能,使用户可以轻松以有序的方式浏览帖子内容。使用“上一个”和“下一个”链接,用户可以跳至较早或更晚的帖子,而无需返回主页或内容列表。通过允许用户找到更多内容而无需离开网站,这可以改善用户体验并增加参与度。像这样的精心设计...
    编程 发布于2025-03-25
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-03-25
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-03-25
  • 如何使用Java套接字API可靠地检测封闭的远程连接?
    如何使用Java套接字API可靠地检测封闭的远程连接?
    java socket API:识别封闭的连接 确定远程连接的状态可能会在使用Java Socket API来具有挑战性。与仅反映套接字的本地状态的IS Connected()和ISClosed()不同,确定连接是否已被远程方切断。必须准确地确定连接状态,您必须与套接字进行积极交互。以下是几种方法...
    编程 发布于2025-03-25
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-03-25
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 c...
    编程 发布于2025-03-25
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    在Java 中,以全屏幕独立模式运行Java应用程序时,通常无法按期望的工作可能无法使用JAVA应用程序时,将用户输入在Java ProblemPassive rendering mode allows the use of KeyListener and ActionListener inter...
    编程 发布于2025-03-25
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-03-25
  • 如何在SQL列中有效计算字符的出现?
    如何在SQL列中有效计算字符的出现?
    SQL字符计数技巧 在处理包含字符字符串的SQL列时,经常需要统计特定字符的出现次数。此操作可能出现在各种场景中,例如分析数据分布或从文本信息中提取见解。 统计二进制字符串中'Y'字符的个数 一个具体的例子是统计二进制字符(每个字符可以是'Y'或'N'...
    编程 发布于2025-03-25

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3