PSR-12要求大括号独占一行(Allman风格),PhpStorm需将Braces placement中Control statements和Functions均设为Next line,Spaces→Within parentheses必须取消勾选,并勾选After if/for/function等关键字后空格选项。

PSR-12 要求大括号独占一行(Allman 风格),但 PhpStorm 默认是 K&R 风格({ 跟在语句后),不改会和 php-cs-fixer 冲突,格式化后反复打回。
Brace placement 必须设为 Next line(Allman)
这是最常被忽略、也最影响 PSR-12 合规性的设置。默认的 End of line(K&R)会导致 if ($x) { 这种写法,违反 PSR-12 第 4.2 条 —— 控制结构的大括号必须独占一行。
- 路径:
Settings/Preferences → Editor → Code Style → PHP → Wrapping and Braces → Braces placement - 关键选项:将
Control statements和Functions两项都设为Next line - 不要只改其中一项:比如只改
Functions而漏掉Control statements,if/for/while仍会保持 K&R 风格 - 注意「Class declarations」默认就是
Next line,通常不用动;但如果你用的是旧版模板,也建议确认一下
Spaces → Within parentheses 必须取消勾选
勾选它会让 foo($bar) 变成 foo( $bar ),直接违反 PSR-12 “括号内不加空格” 的硬性规定(第 4.4 条)。
- 路径:
Settings/Preferences → Editor → Code Style → PHP → Spaces - 找到
Within parentheses,确保它未勾选 - 同时检查
Within brackets和Within braces也都应取消勾选,保持数组[$a, $b]、匿名函数fn() => $x等写法干净 - 别被“Around operators”或“After comma”干扰 —— 这些该开,但和括号内空格无关
Keyword spacing 要手动补全(if/for/function 后必须有空格)
PhpStorm 不会自动帮你补关键字后的空格;如果没开对应选项,if($x) 或 functionfoo() 就会逃过格式化,导致静态检查失败。
立即学习“PHP免费学习笔记(深入)”;
- 路径:
Settings/Preferences → Editor → Code Style → PHP → Spaces - 勾选以下三项:
After if、After for、After function(注意不是After foreach,那是另一个独立选项) -
After while、After switch也建议一并勾选,保持一致性 - 这个设置只影响格式化行为,不会修改已有代码;所以开完后要对老文件执行一次
Ctrl+Alt+L才生效
别信“Set from PSR-12”就万事大吉
PhpStorm 内置的 PSR-12 模板在 2026 年前版本中存在两个常见偏差:一是默认仍勾选 Within parentheses,二是没强制开启所有 keyword spacing 项。靠导入模板省事,反而容易漏检。
- 导入后务必手动进
Spaces和Braces placement页面复核 - 尤其注意
Within parentheses是“勾选即错”,而多数人习惯性以为“开了才规范” - 团队共享配置时,导出的
php-style.xml文件里,<option name="SPACE_WITHIN_PARENTHESES" value="false"></option>这行必须存在且为false
真正麻烦的不是设哪几项,而是每次更新 PhpStorm 或切换项目时,它可能悄悄恢复全局默认值 —— 建议把关键参数截图存档,或者定期用 Manage… → Export to file 备份一份干净的 PSR-12 配置。


















