本文目录导读:

在 PHP 中统一代码风格,最主流的方案是使用 PHP-CS-Fixer 或 PHP_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 配置
Settings → Plugins安装PHP CS Fixer插件Settings → Tools → PHP CS Fixer配置可执行路径- 启用
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();
}
}
总结建议
- 首选:PHP-CS-Fixer + PSR-12 标准
- 强制:在 CI/CD 中加入代码风格检查
- 实战:让所有开发者本地配置自动修复
- 渐进:如果是老项目,可以分批次修复历史代码
用这套组合拳,能确保团队成员提交的代码风格完全一致,如果需要更复杂的规则,可以参考 PHP-CS-Fixer 官方文档 自定义规则。