大括号在PHP中用于变量插值、嵌套引用和字符串索引,仅双引号支持解析;${$arr[$i]}先取键名再取变量值,${$arr}[$i]则先取变量再下标访问;$str{0}在PHP 8.0+已废弃,须用$str[0];控制结构必须加{}避免逻辑错误。

大括号在变量插值中必须用双引号包裹
单引号里写 ${var} 或 "${var}_suffix" 完全无效——PHP 不做任何变量解析。只有双引号字符串才支持这种定界,否则会原样输出文字。常见错误是复制了别人示例却忘了改引号类型,结果页面上直接显示 ${user_id} 这种裸文本。
嵌套变量引用必须用大括号明确边界
当你要取动态键名或数组下标时,${$arr[$i]} 和 ${$arr}[$i] 含义完全不同:前者先算 $arr[$i] 得到变量名再取值;后者是取 $arr 的值,再尝试对它做 [$i] 下标访问。不加 {} 极易因优先级误解导致 Notice: Undefined variable 或逻辑错乱。
- 正确:
${$config['db_host']}(从配置数组取出变量名,再读该变量) - 错误:
$config['db_host'][$i](想取变量却写了数组访问)
字符串字符修改仍可用 {},但已不推荐
PHP 5.5 起就标记 $str{0} = 'x' 为废弃语法,PHP 8.0+ 已彻底移除。现在必须用 []: $str[0] = 'x'。虽然部分老代码还能跑,但升级到 PHP 8.1 后会直接报 Fatal error: Uncaught Error: Cannot use string offset as an array —— 实际是底层把 {} 当作数组语法解析失败了。
复合语句里大括号不是可选项
哪怕只有一行,if、for、foreach 后不加大括号,在后续加逻辑时极易出错。PHP 8.1 不会因此报错,但人眼容易漏看缩进,导致 else 绑错分支、循环体意外扩大。更隐蔽的问题是:某些 IDE 或静态分析工具(如 PHPStan)在无大括号时无法准确推导作用域,可能漏报未定义变量。
立即学习“PHP免费学习笔记(深入)”;
最常被忽略的是变量插值和嵌套引用的组合场景,比如 "User: ${$users[$id]->name}"——这里三个层级的解析全靠 {} 划清边界,少一对就会崩。



















