随着 php 版本的快速迭代,我们享受着新特性带来的便利,但也面临着旧项目升级的巨大挑战。手动修改废弃语法、调整函数调用、适配新的类型声明……这不仅工作量巨大,而且稍有不慎就可能引入新的 bug。尤其是在大型项目中,这种“体力活”更是让人望而却步。
除了版本升级,代码规范也是一个永恒的话题。每个开发者都有自己的编码习惯,当这些习惯汇聚到一个项目中时,代码风格的差异就会显现出来:有的用空格,有的用 Tab;有的喜欢长行,有的偏爱短行;甚至命名规范也可能五花八门。这不仅降低了代码的可读性,也增加了代码审查的难度和团队协作的摩擦。
我曾尝试过各种方法来解决这些问题:手动查找替换、编写简单的脚本,甚至依赖人工 Code Review。但这些方法效率低下,容易遗漏,并且无法从根本上解决问题。我需要一个更智能、更自动化的工具。
eliashaeussler/rector-config
在一番探索之后,我发现了 Rector。它是一个强大的 PHP 代码静态分析和重构工具,能够自动执行大量的代码转换任务,包括:
然而,Rector 的强大也伴随着其配置的复杂性。
rector.php
立即学习“PHP免费学习笔记(深入)”;
这时,
eliashaeussler/rector-config
rector.php
eliashaeussler/rector-config
使用 Composer 引入
eliashaeussler/rector-config
<pre class="brush:php;toolbar:false">composer require --dev eliashaeussler/rector-config
安装完成后,你就可以在项目的
rector.php
rector.php
eliashaeussler/rector-config
<pre class="brush:php;toolbar:false">// rector.php use EliasHaeussler\RectorConfig\Config\Config; use EliasHaeussler\RectorConfig\Set\CustomSet; use Rector\Config\RectorConfig; use Rector\Php80\Rector\Class_\AnnotationToAttributeRector; use Rector\Set\ValueObject\SetList; use Rector\ValueObject\PhpVersion; return static function (RectorConfig $rectorConfig): void { // 1. 可选:明确配置 PHP 版本,Rector 会根据此版本进行转换 // 如果不设置,Rector 会使用当前环境的 PHP 版本 $phpVersion = PhpVersion::PHP_81; // 2. 创建配置对象,并指定需要扫描的目录 $config = Config::create($rectorConfig, $phpVersion)->in( __DIR__.'/src', // 扫描 src 目录 __DIR__.'/tests', // 扫描 tests 目录 ); // 3. 排除不需要扫描的特定路径 $config->not( __DIR__.'/src/lib', // 排除 src/lib 目录 __DIR__.'/tests/test-application/vendor', // 排除测试应用中的 vendor 目录 ); // 4. 包含常用的框架/库特定的 Rector 规则集 $config->withPHPUnit(); // 包含 PHPUnit 相关的升级和规范规则 $config->withSymfony(); // 包含 Symfony 框架相关的规则 $config->withTYPO3(); // 包含 TYPO3 框架相关的规则 // 5. 包含自定义的通用规则集 $config->withSets( new CustomSet( SetList::CODE_QUALITY, // 包含代码质量提升规则 SetList::CODING_STYLE, // 包含编码风格规范规则 ), ); // 6. 跳过特定的 Rector 规则或文件 $config->skip( AnnotationToAttributeRector::class, // 跳过将注解转换为属性的 Rector 规则 [ __DIR__.'/src/Some/File.php', // 跳过特定文件的处理 ], ); // 7. 应用所有配置 $config->apply(); };
代码解析:
Config::create($rectorConfig, $phpVersion)
eliashaeussler/rector-config
Config
->in()
->not()
->withPHPUnit()
->withSymfony()
->withTYPO3()
eliashaeussler/rector-config
->withSets(new CustomSet(...))
CODE_QUALITY
CODING_STYLE
->skip()
->apply()
通过这种方式,原本可能需要几十甚至上百行手动配置的
rector.php
eliashaeussler/rector-config
CODE_QUALITY
eliashaeussler/rector-config
rector.php
eliashaeussler/rector-config
eliashaeussler/rector-config
以上就是告别繁琐!eliashaeussler/rector-config如何轻松搞定PHP代码升级与规范化的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号