PHP 8.2中if/else大括号必须换行且顶格对齐,左括号前空一格、独占一行,右括号单独成行并与关键词对齐;单语句也须用大括号,禁用省略写法。

if/else 语句中大括号必须换行且缩进
PHP 8.2 没有改变控制结构的大括号规则,但 PSR-12 和实际协作中已形成强共识:if、else、elseif 后的左花括号 { 必须与右括号 ) 之间空一格,并独占一行;右花括号 } 必须单独成行,且与对应关键词对齐。
常见错误是把 { 写在右括号后面(如 if ($x) {)或缩进不统一。这不仅违反 PSR-12,还会让 IDE 自动格式化失效、Git diff 变得混乱。
-
if ($status === 'Active') {→ ❌ 错误:左括号没换行 if ($status === 'Active')<br>{→ ❌ 错误:换行但没空格-
if ($status === 'Active') {→ ✅ 正确写法(注意空格 + 换行) - 主体代码必须缩进 4 个空格(不是 Tab),
}顶格对齐if
单语句也别省略大括号
语法上允许 if (isset($id)) echo $id; 这种无大括号写法,但在 PHP 8.2 项目中应视为反模式。一旦后续加日志、校验或赋值,漏补大括号就会导致逻辑失控——比如:
if (isset($id)) $id = (int)$id; echo $id; → echo 永远执行,不受条件约束。
立即学习“PHP免费学习笔记(深入)”;
- 所有
if/foreach/while即使只有一条语句,也强制用大括号包裹 - HTML 内联 PHP 同样适用:
value="<?php if ($disabled) { echo 'disabled'; } ?>" - 团队协作时,统一风格比“省字符”重要得多;PHPStorm 等工具默认也推荐此行为
类和方法声明的大括号位置有区别
类的左括号必须换行,而方法的左括号必须跟在声明同一行——这是 PSR-12 明确区分的两套规则,混用会触发 PHPCS 报错。
- 类定义:
class User<br>{→ ✅ 正确(换行) - 方法定义:
public function getName(): string {→ ✅ 正确(不换行) - 错误示范:
public function getName(): string<br>{→ ❌ 类方法左括号换行是违规的 - PHP 8.2 的
readonly class同样遵循该规则,不因只读修饰符而改变括号位置
字符串插值里的 {} 不是控制结构括号
别把 "Hello {$user->name}" 中的 {} 当作语法块——它只是变量解析的定界符,和 if 大括号完全无关,也不受缩进或换行规则约束。
PHP 8.2 已弃用 ${var} 这种写法,仅保留 $var 和 {$var} 两种合法形式。若你在双引号里写 { 但没配对闭合,会直接报 Parse error: syntax error, unexpected '{'。
- 数组访问必须用
{$items['key']},不能写$items['key'](虽然有时能运行,但不可靠) - 方法调用只支持
{$user->getName()},${user->getName()}是非法的 - 这种
{}里禁止嵌套复杂表达式,例如{($a ?? $b)}在 PHP 8.2 中不被允许



















