必须项目级安装、显式指定psr12标准、加--error-severity=1控制退出码:运行composer require --dev squizlabs/php_codesniffer,用./vendor/bin/phpcs --standard=psr12 --error-severity=1确保ci严格校验并中断失败。

Composer 本身不验证 PSR 规范,但能帮你装好、跑通、卡死 PHPCS —— 关键是三件事:装对、调对、退对。
怎么装 PHPCS 才不会“命令找不到”
项目级安装比全局更稳,CI 和新同事拉代码后直接可用:
- 运行
composer require --dev squizlabs/php_codesniffer(别用global require,Windows 权限和 PATH 太容易翻车) - 装完立刻验证:在项目根目录运行
./vendor/bin/phpcs -i,输出里必须有PSR12,否则规则没加载成功 - 如果
-i输出为空,补装composer require --dev phpcompatibility/php-compatibility(它会顺带拉起 PHPCS 依赖链) - 别信“已安装”,
composer show squizlabs/php_codesniffer看版本:v4.x 要求 PHP ≥7.4,且不再兼容 v3 的自定义 sniff
为什么 phpcs --standard=PSR12 没报错却啥也不干
大小写、路径、配置文件名全卡死,错一个就静默失败:
-
--standard=psr12(小写)→ 无效,必须是PSR12(大写 P、S、R) - 没指定
--standard→ 默认用空规则集,0 个错误也正常 - 想省参数?在项目根目录放
phpcs.xml(不是.phpcs.xml或phpcs.xml.dist),内容至少含<rule ref="PSR12"></rule> - 检查单个文件时,路径必须存在:
phpcs --standard=PSR12 src/MyClass.php,若src/不存在,会报Could not open input file
怎么让 composer run lint 真正卡住 CI 构建
默认情况下 phpcs 即使扫出 100 个 ERROR,退出码仍是 0 —— CI 就这么悄无声息地绿了:
- 必须加
--error-severity=1:只要出现任意 ERROR(比如缺少类型声明、语法错误),就返回非零退出码 - 慎用
--warning-severity:设太高(如=5)会让 TODO 注释、未使用变量之类阻断构建,建议只对严重问题卡点(--warning-severity=8) - 脚本里别硬写
phpcs,用"lint": "phpcs --standard=PSR12 --error-severity=1 src/ tests/"—— Composer 会自动把vendor/bin加进子进程 PATH - CI 中加
set -e(Linux/macOS)或fail-fast: true(GitHub Actions),否则退出码被吞掉,检查形同虚设
PHPCS 和 php-cs-fixer 必须共存,不能只选一个
它们分工不同,合起来才完整:
-
phpcs(squizlabs/php_codesniffer)只报告问题:命名是否符合 PSR-1、function (int $a)缺少空格、注释格式等 —— 它不改代码,适合做 CI 卡点 -
php-cs-fixer(friendsofphp/php-cs-fixer)只修复格式:括号位置、数组语法、空行、??=前后空格 —— 它不管语义规则,修完还得靠phpcs验证 - 装两个:
composer require --dev squizlabs/php_codesniffer friendsofphp/php-cs-fixer - 别用
phpcbf替代php-cs-fixer:PHP 8.2+ 新语法(如function (int $a))下,phpcbf容易错修成function(int $a)(直接语法错误)
最常被忽略的是退出码控制和规则加载路径 —— 同一套命令,在本地终端能报错,CI 里却永远绿色,八成是 --error-severity 没加,或者 phpcs.xml 放错了位置、拼错了名字。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











