php 7.3 无大括号语法变更,psr-12 要求控制结构和函数大括号独占一行(allman 风格),需手动将 phpstorm 的 brace position 设为 next line 并关闭 within parentheses 空格选项。

PHP 7.3 的大括号写法本身没有语法变更,PSR-12 对大括号的要求与 PHP 版本无关,只取决于你是否按规范配置了编辑器和格式化工具——不改设置,Ctrl+Alt+L 格式化出来的 if、function 大括号大概率还是错的。
Brace placement 必须设为 Next line
PSR-12 明确要求控制结构(if、for、while)和函数定义的大括号独占一行,即 Allman 风格。PhpStorm 默认是 End of line(K&R 风格),这会导致:
-
if ($x) {→ 违反 PSR-12,正确应为if ($x)换行后写{ -
function foo() {→ 同样错误,必须拆成两行
操作路径:Settings → Editor → Code Style → PHP → Wrapping and Braces,找到:
-
Brace position for control statements→ 设为Next line -
Brace position for function declaration→ 同样设为Next line
Spaces within parentheses 必须关闭
PSR-12 规定括号内不能有空格,比如 foo($bar) 是对的,foo( $bar ) 是错的。但 PhpStorm 默认勾选了 Within parentheses,一格式化就加空格。
操作路径:Settings → Editor → Code Style → PHP → Spaces,取消勾选:
Within parentheses-
Within brackets(数组方括号同理)
注意:这个选项和 PHP 7.3 无关,但若没关,哪怕你写了 array_merge($a, $b),格式化后也会变成 array_merge( $a, $b ),CI 直接报错。
为什么 PHP 7.3 项目还常踩坑
因为 PSR-12 的括号换行规则在 PHP 7.3 中容易被误读为“兼容性问题”,其实不是:
- PHP 7.3 完全支持
if ($x)换行后写{,语法无任何问题 - 真正翻车的是:团队只配了 PhpStorm 的 PSR-12 模板,却没同步配
php-cs-fixer或phpcs;结果本地 Ctrl+Alt+L 看着对,push 到 CI 却被php-cs-fixer --dry-run打回 - 还有人把
Brace placement错设成Next line (BSD style),它会在else前多加空行,PSR-12 并不要求这个
最易被忽略的一点:PhpStorm 的 Set from → PSR-12 只改骨架,Braces 和 Spaces 两个页签里的关键开关仍需手动核对——模板不会帮你关掉 Within parentheses,也不会自动把 Brace position 改成 Next line。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











