本文目录导读:

- PHP-CS-Fixer(代码风格修复)
- PHP_CodeSniffer 自动修复
- Rector(规则引擎自动升级/重构)
- PHPStan(静态分析,部分自动修复)
- 自动化集成到 CI/CD
- 集成到 IDE
- 自定义自动化修复脚本
- 完整工作流程建议
在 PHP 中自动化修复代码,主要有以下几个方向和工具:
PHP-CS-Fixer(代码风格修复)
最流行的代码风格自动化修复工具:
# 安装 composer require --dev friendsofphp/php-cs-fixer # 创建配置文件 .php-cs-fixer.php
.php-cs-fixer.php 配置示例:
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__ . '/src')
->in(__DIR__ . '/tests')
->exclude('vendor');
return (new PhpCsFixer\Config())
->setRules([
'@PSR12' => true,
'array_syntax' => ['syntax' => 'short'],
'no_unused_imports' => true,
'ordered_imports' => ['sort_algorithm' => 'alpha'],
'single_quote' => true,
'trailing_comma_in_multiline' => true,
])
->setFinder($finder);
运行修复:
# 修复所有文件 vendor/bin/php-cs-fixer fix # 指定目录 vendor/bin/php-cs-fixer fix src/ # 测试模式(不修改文件) vendor/bin/php-cs-fixer fix --dry-run --diff
PHP_CodeSniffer 自动修复
# 安装 composer require --dev squizlabs/php_codesniffer # 自动修复 vendor/bin/phpcbf --standard=PSR12 src/ # 使用 WordPress 标准 vendor/bin/phpcbf --standard=WordPress src/
Rector(规则引擎自动升级/重构)
用于自动化代码重构和升级:
# 安装 composer require --dev rector/rector # 创建 rector.php 配置文件
rector.php 配置:
<?php
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\SetList;
return RectorConfig::configure()
->withPaths([
__DIR__ . '/src',
])
->withSets([
SetList::CODE_QUALITY,
SetList::DEAD_CODE,
SetList::PHP_80,
]);
运行:
# 预览更改 vendor/bin/rector process --dry-run # 实际执行修复 vendor/bin/rector process
PHPStan(静态分析,部分自动修复)
# 安装 composer require --dev phpstan/phpstan # 运行分析 vendor/bin/phpstan analyse src --level=8
创建 phpstan.neon 配置:
parameters:
level: 8
paths:
- src
reportUnmatchedIgnoredErrors: false
自动化集成到 CI/CD
创建 composer.json 脚本:
{
"scripts": {
"fix": [
"@php vendor/bin/php-cs-fixer fix",
"@php vendor/bin/phpcbf --standard=PSR12 src/"
],
"check": [
"@php vendor/bin/php-cs-fixer fix --dry-run --diff",
"@php vendor/bin/phpstan analyse src --level=8"
]
}
}
GitHub Actions 示例:
name: PHP Quality
on: [push, pull_request]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Install dependencies
run: composer install
- name: Auto-fix code style
run: composer fix
- name: Check changes
run: git diff --exit-code
集成到 IDE
VS Code 配置(settings.json):
{
"php-cs-fixer.executablePath": "${workspaceFolder}/vendor/bin/php-cs-fixer",
"php-cs-fixer.rules": "@PSR12",
"[php]": {
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client",
"editor.formatOnSave": true
}
}
PhpStorm 配置:
- 设置 → 工具 → 文件监视器
- 添加 PHP-CS-Fixer 监视器
- 设置为保存时自动修复
自定义自动化修复脚本
<?php
// fix.php - 自定义修复脚本
class AutoFixer {
private array $files = [];
public function run(): void {
$this->collectFiles();
$this->fixClassNames();
$this->fixImports();
}
private function collectFiles(): void {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('src')
);
foreach ($iterator as $file) {
if ($file->getExtension() === 'php') {
$this->files[] = $file->getPathname();
}
}
}
private function fixClassNames(): void {
foreach ($this->files as $file) {
$content = file_get_contents($file);
// 修复命名空间大小写
$content = preg_replace(
'/namespace\s+([a-zA-Z0-9_\\\]+);/',
function($matches) {
return 'namespace ' . str_replace('\\', '\\', ucwords($matches[1], '\\')) . ';';
},
$content
);
file_put_contents($file, $content);
}
}
private function fixImports(): void {
// 移除未使用的 use 语句等
}
}
(new AutoFixer())->run();
完整工作流程建议
# 开发流程建议 composer check # 检查问题 composer fix # 自动修复 vendor/bin/rector process --dry-run # 预览重构 vendor/bin/rector process # 执行重构 composer test # 运行测试确认无破坏
核心建议:
- 将修复工具配置到 CI 中自动检查
- 在 IDE 中启用保存时自动格式化
- 定期运行 Rector 升级代码
- 使用 Git 分支保护,merge 前必须通过质量检查
选择工具时,从 PHP-CS-Fixer 开始最简单,Rector 适合项目升级,PHPStan 用于发现潜在问题而不是自动修复。