PHP 5.5 中大括号 {} 仅用于三类场景:双引号字符串中界定变量边界(如 "{$user->name}")、函数/控制结构的语句块包裹、以及语法必需的花括号;它不支持 array{} 或 {} 数组字面量,此类写法会直接触发 Parse error: syntax error, unexpected '{'。

PHP 5.5 不支持短数组语法 [] 以外的“大括号写法”——它压根没有 {} 用于数组或对象字面量的语法。如果你看到类似 {$var} 或 function() { ... },那不是“大括号写法”,而是字符串插值或函数定义的固有符号,和数组/对象构造无关。
PHP 5.5 中哪些地方会用到大括号?
真正涉及 {} 的常见场景只有三个,且各自语义完全不同,混用就会出错:
-
{}在双引号字符串中仅用于明确变量边界,如"Hello {$user->name}!"(否则"Hello $user->name!"会被解析为$user变量加字符串->name!) -
{}是函数、方法、控制结构(if、for等)的必需语句块包裹符,不可省略(即使单行),例如if ($x) { echo 'ok'; } -
{}不能用来声明数组(['a', 'b']是唯一合法方式)、也不能用来声明对象字面量(PHP 5.5 尚未支持(object)['prop' => 'val']或new class{})
为什么 array{...} 或 {...} 写数组会报错?
因为 PHP 5.5 解析器根本不认识这种语法。你如果写了 $arr = {1,2,3}; 或 $arr = array{1,2,3};,会直接触发 Parse error: syntax error, unexpected '{'。
正确写法只有:
立即学习“PHP免费学习笔记(深入)”;
- 传统
array():$arr = array(1, 2, 3); - 短数组语法(PHP 5.4+ 支持,5.5 完全可用):
$arr = [1, 2, 3]; - 关联数组同理:
['id' => 123, 'name' => 'Alice']
字符串中用 {} 插值时容易踩的坑
看似简单,但实际调试时高频出问题:
- 只对复杂表达式有效:
$user->name、$items[0]['title']必须包{};而$name单变量可不包,但包了也无害 - 嵌套引号易漏转义:
"{$obj->get('key')}"合法;但"{$obj->get("key")}"会因双引号提前闭合而报错 - 不能包含语句:
{echo 'x';}或{return 1;}在字符串里是非法的,{}里面只允许表达式 - 性能无差别:PHP 5.5 中
"$a$b"和"{$a}{$b}"编译后完全等价,不必为“清晰”强行加花括号
最清晰的做法,其实是克制使用 {} ——只在必须时才加(比如 $user->role 这种属性访问),其余情况优先用空格分隔或拆成多行字符串。PHP 5.5 没有现代类型系统或 IDE 强校验,过度依赖符号反而增加阅读负担。



















