Rector 完整指南:3 步完成 PHP 8.4 升级的自动化适配
2026/9/16 15:24:38 网站建设 项目流程

Rector 完整指南:3 步完成 PHP 8.4 升级的自动化适配

【免费下载链接】rectorInstant Upgrades and Automated Refactoring of any PHP 5.3+ code项目地址: https://gitcode.com/GitHub_Trending/re/rector

你正在把项目升级到 PHP 8.4,改完一轮又弹出警告:round()还在用旧常量,重写方法没加#[\Override]。几百个文件难道要一个个翻?这篇 Rector 使用教程,用 3 步跑通 PHP 8.4 自动升级,读完就能照做。

看懂 Rector 定位:它凭什么批量改代码

一句话定位:Rector 是 PHP 的自动化重构工具,专治版本升级和代码规范这类体力活。它能"批量改而不改错",靠三点:

  • 懂结构,不做字符串替换:先把代码解析成 AST(抽象语法树)。规则能精准定位是哪个函数调用、哪个方法在重写父类,变量改名也骗不了它。
  • dry-run 预览模式:改完先算不先落盘。你确认 diff 没问题,它才真正写文件。
  • 规则可持续扩展:每个 PHP 版本的新特性都配独立规则集,比如 config/set/php84.php 就登记了 8.4 的全部规则。新版本来了,你只管开启,不用自己写。

5 分钟跑通第一次自动重构

整个过程就三步,5 分钟能跑完。

第一步,安装并生成配置

composer require rector/rector --dev vendor/bin/rector init

rector init会自动在根目录生成rector.php配置文件。

第二步,配置只留关键项

use Rector\Config\RectorConfig; return RectorConfig::configure() ->withPaths([__DIR__ . '/src']) ->withPreparedSets( php84: true );

withPaths指定扫描哪些目录,php84: true开启 8.4 规则集,够了。

第三步,首次 dry-run 预览

vendor/bin/rector src --dry-run

它会列出"哪些文件会被改、怎么改",但一个字符都不会动。

眼见为实:看代码被自动改写

给重写方法自动补上 #[\Override]

class OrderService extends BaseOrderService { - public function cancel(): void + #[\Override] + public function cancel(): void { // ... } }

规则会遍历类继承链,找出每个真正重写父类的方法,逐个打上属性。不用你开文件逐个核对。实现见 rules/Php83/Rector/ClassMethod/AddOverrideAttributeToOverriddenMethodsRector.php。顺带一提,#[\Override]是 8.3 引入的,从 8.4 起无效重写直接报错,所以升级前必须标记。

废弃常量换成 RoundingMode 枚举

-round(1.5, 0, PHP_ROUND_HALF_UP); +round(1.5, 0, RoundingMode::HalfAwayFromZero);

PHP 8.4 新增了RoundingMode枚举,PHP_ROUND_*四个常量正式废弃。Rector 按映射关系逐个替换,舍入语义一个字都不会变。规则源码在 rules/Php84/Rector/FuncCall/RoundingModeEnumRector.php。

上生产前过一遍安全清单 ⚠️

工具再稳,提交前也别跳过这几步:

  1. 先预览:跑一遍vendor/bin/rector src --dry-run,diff 输出就是你的确认依据。
  2. 改后跑测试:单元测试全量过一遍,确认行为没变。
  3. 查残留警告:用 PHP 8.4 环境运行项目,确认废弃警告清零。
  4. 看运行总结:结尾输出会汇总改动文件数,核对一下是否符合预期。
  5. 排除不该动的:skip 同时支持排除整目录、排除单条规则,示例见下:
->withSkip([ __DIR__ . '/src/Legacy', RoundingModeEnumRector::class => [ __DIR__ . '/src/OldMath.php', ], ])

第一项排除整个遗留目录,第二项让某个文件躲开某条规则。

把 Rector 变成团队基建

  • 自定义规则:团队私有规范,可以继承 Rector 基类写一条规则,用withRules()注册。仓库的 templates/ 目录里就有自定义规则的脚手架代码,照着改最快。
  • 接入 CI:流水线加一行vendor/bin/rector src --dry-run。只要它"想改"东西,就让构建失败,谁也别想塞进不合规的代码 ✅

规则从此成为团队的"质量门禁",规范不再靠口头约定。

从手动改到自动适配,路径其实很短:装、配、预览。想深入,看 rules/Php84/ 浏览 8.4 全部规则源码,用法细节查 README.md,升级说明看 UPGRADING.md。跑完之后,体力活归 Rector,你的时间还给真正的业务代码。

【免费下载链接】rectorInstant Upgrades and Automated Refactoring of any PHP 5.3+ code项目地址: https://gitcode.com/GitHub_Trending/re/rector

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询