PHP 怎么自动化修复

wen PHP项目 2

本文目录导读:

PHP 怎么自动化修复

  1. PHP-CS-Fixer(代码风格修复)
  2. PHP_CodeSniffer 自动修复
  3. Rector(规则引擎自动升级/重构)
  4. PHPStan(静态分析,部分自动修复)
  5. 自动化集成到 CI/CD
  6. 集成到 IDE
  7. 自定义自动化修复脚本
  8. 完整工作流程建议

在 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 配置:

  1. 设置 → 工具 → 文件监视器
  2. 添加 PHP-CS-Fixer 监视器
  3. 设置为保存时自动修复

自定义自动化修复脚本

<?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 用于发现潜在问题而不是自动修复。

抱歉,评论功能暂时关闭!