PHP 怎么统一代码风格

wen PHP项目 2

本文目录导读:

PHP 怎么统一代码风格

  1. 选择标准:PSR-12(推荐)
  2. 工具安装与配置
  3. 自动化集成
  4. 编辑器配置
  5. 团队协作约定
  6. 常见问题与解决
  7. 完整示例:一个符合 PSR-12 的类
  8. 总结建议

在 PHP 中统一代码风格,最主流的方案是使用 PHP-CS-FixerPHP_CodeSniffer,配合团队约定来实施。

以下是完整的实践方案:

选择标准:PSR-12(推荐)

PHP 社区最通用的标准是 PSR-12(2019年发布,替代 PSR-2),它扩展了 PSR-1 基础编码标准。

核心规则示例:

  • 使用 4 个空格缩进(不用 Tab)
  • 关键字小写,常量大写
  • 类名使用 StudlyCaps,方法名使用 camelCase
  • 命名空间和 use 声明后各空一行
  • 花括号独占一行(类、方法),控制结构花括号同一行
  • 每行不超过 120 个字符(软限制 80)

工具安装与配置

PHP-CS-Fixer(自动修复)

# 全局安装
composer global require friendsofphp/php-cs-fixer

创建 .php-cs-fixer.php 配置文件:

<?php
$finder = PhpCsFixer\Finder::create()
    ->in([__DIR__.'/src', __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,
        'blank_line_before_statement' => true,
    ])
    ->setFinder($finder)
    ->setRiskyAllowed(true);

PHP_CodeSniffer(检测+修复)

composer global require squizlabs/php_codesniffer

创建 phpcs.xml 配置:

<?xml version="1.0"?>
<ruleset name="Project Standard">
    <file>src</file>
    <file>tests</file>
    <arg name="basepath" value="."/>
    <arg name="colors"/>
    <arg value="sp"/>
    <!-- PSR12 标准 -->
    <rule ref="PSR12">
        <exclude name="PSR12.Files.FileHeader.SpacingAfterBlock"/>
    </rule>
    <!-- 额外规则 -->
    <rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="120"/>
            <property name="absoluteLineLimit" value="0"/>
        </properties>
    </rule>
</ruleset>

自动化集成

Git Hooks(强制在提交前检查)

.git/hooks/pre-commit 中添加:

#!/bin/sh
./vendor/bin/php-cs-fixer fix --dry-run --diff
if [ $? -ne 0 ]; then
    echo "代码风格不符合规范,请先运行: composer cs-fix"
    exit 1
fi

Composer 脚本(便捷命令)

composer.json 中添加:

{
    "scripts": {
        "cs-check": "php-cs-fixer fix --dry-run --diff",
        "cs-fix": "php-cs-fixer fix",
        "cs-fix-src": "php-cs-fixer fix src/"
    }
}

编辑器配置

VS Code 配置(推荐)

.vscode/settings.json 中:

{
    "php-cs-fixer.executablePath": "./vendor/bin/php-cs-fixer",
    "php-cs-fixer.rules": "@PSR12",
    "php-cs-fixer.formatHtml": true,
    "[php]": {
        "editor.defaultFormatter": "bmewburn.vscode-intelephense-client",
        "editor.formatOnSave": true,
        "editor.rulers": [80, 120],
        "editor.tabSize": 4,
        "editor.insertSpaces": true
    }
}

PHPStorm 配置

  1. Settings → Plugins 安装 PHP CS Fixer 插件
  2. Settings → Tools → PHP CS Fixer 配置可执行路径
  3. 启用 Run on save

团队协作约定

初始化脚本(cs-init.sh

#!/bin/bash
# 创建统一的代码风格配置
cp .php-cs-fixer.php ~/php-cs-fixer-conf/
cp phpcs.xml ~/phpcs-conf/
echo "代码风格配置已复制到用户目录"

CI/CD 检查(GitLab CI 示例)

code-style:
  stage: test
  script:
    - composer install
    - composer cs-check
  only:
    - merge_requests

常见问题与解决

问题 解决方案
线上环境无法安装工具 使用 Docker 容器执行检查
历史代码不符合标准 先运行 php-cs-fixer fix 一次性修复,再提交
某些文件无需修复(如生成文件) 在配置的 Finder 中使用 exclude 排除
不同开发环境 PHP 版本差异 使用 composer global 安装固定版本

完整示例:一个符合 PSR-12 的类

<?php
declare(strict_types=1);
namespace App\Services;
use App\Contracts\UserRepositoryInterface;
use RuntimeException;
class UserService
{
    public function __construct(
        private UserRepositoryInterface $repository
    ) {
    }
    public function getUser(int $id): ?User
    {
        if ($id <= 0) {
            throw new RuntimeException('Invalid user ID.');
        }
        return $this->repository->findById($id);
    }
    public function getActiveUsers(): array
    {
        return $this->repository
            ->findAll()
            ->filter(fn ($user) => $user->isActive())
            ->toArray();
    }
}

总结建议

  1. 首选:PHP-CS-Fixer + PSR-12 标准
  2. 强制:在 CI/CD 中加入代码风格检查
  3. 实战:让所有开发者本地配置自动修复
  4. 渐进:如果是老项目,可以分批次修复历史代码

用这套组合拳,能确保团队成员提交的代码风格完全一致,如果需要更复杂的规则,可以参考 PHP-CS-Fixer 官方文档 自定义规则。

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