PHP 8.2起仅推荐两种字符串插值方式:“Hello $name”用于简单变量,“Hello {$name}”支持数组、对象等复杂表达式;弃用“${name}”和“${(expr)}”写法,PHP 9将移除;字符串连接仍仅用.运算符。

只保留两种明确、推荐的插值方式
PHP 8.2 起,以下两种写法是官方唯一鼓励的变量嵌入方式:
-
直接写法:如
"Hello $name"—— 简洁,仅适用于简单变量名(不能含空格、特殊字符或复杂表达式) -
大括号包裹写法:如
"Hello {$name}"或"Price: {$product['price']}"—— 明确界定变量边界,支持数组索引、对象属性、方法调用等复杂结构
明确弃用的写法(PHP 8.2 警告,PHP 9 删除)
以下两种曾存在的语法已被标记为不推荐,且将彻底移除:
-
"${name}"—— 与可变变量语法冲突,语义模糊 -
"${(expr)}"—— 实为可变变量解析,不是纯插值,容易误用
例如:var_dump("${foo}"); 在 PHP 8.2 中会触发 Deprecated 警告,升级到 PHP 9 将直接报错。
大括号写法真正强大的地方
它不只是“加个括号”,而是唯一支持复杂表达式的插值入口:
立即学习“PHP免费学习笔记(深入)”;
- 访问数组元素:
"{$user['first_name']}" - 调用对象方法:
"{$api->getVersion()}" - 链式调用:
"{$items[0]->getName()}" - 混合索引与对象:
"{$config['db']->host}"
而直接写法 "$user[first_name]" 仅支持无引号、无空格的键名;一旦键含空格或特殊符号,就必须用大括号。
注意:字符串连接运算符没变
网上有说法称 PHP 8 支持 + 连接字符串,这是错误信息。PHP 始终只认 . 为字符串连接运算符。+ 是算术加法,用于数字;用它拼字符串会导致类型转换或警告,不可用于插值或连接。



















