数组表示法中的PHP花括号

数组表示法中的PHP花括号,php,arrays,braces,Php,Arrays,Braces,我刚刚遇到了一段非常奇怪的php代码: $oink{'pig'} = 1; var_dump($oink); $oink{'pig'} = '123123'; echo $oink{'pig'}; /* => 123123 */ echo $oink['pig']; /* => 123123 */ 它的工作原理类似于阵列,但手册中没有提到。这是什么?手册中提到了这一点,但并不清楚: 简而言之,大括号只能访问单个字符(尝试添加完整字符串,您将看到它只返回第一个字符)。它也被弃用,

我刚刚遇到了一段非常奇怪的php代码:

$oink{'pig'} = 1;
var_dump($oink);

$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */

它的工作原理类似于阵列,但手册中没有提到。这是什么?

手册中提到了这一点,但并不清楚:


简而言之,大括号只能访问单个字符(尝试添加完整字符串,您将看到它只返回第一个字符)。它也被弃用,因此我会避免使用它。

根据文档中的这一评论,它只是另一种符号,可能是为了类似Perl语法而设计的:


更新:最初发布此答案时,PHP手册中没有关于此符号的任何官方信息。然而,到2014年,上述注释已被删除,因此,该符号已在手册中正式提及。

是手册中提到的
{}
只是
[]
的一种替代语法:

方括号和大括号都可以互换使用来访问数组元素(例如,
$array[42]
$array{42}
在上面的示例中都将执行相同的操作)

字符串也是如此:

可以通过使用方括号指定字符串后所需字符的零基偏移量来访问和修改字符串中的字符,如
$str[42]
中所述为此,请将字符串视为字符数组。[…]

注意:也可以使用大括号访问字符串,如在
$str{42}
中,出于相同目的


从PHP7.4开始,不推荐使用大括号访问数组


使用大括号的数组和字符串偏移量访问被正式弃用PHP7.4
Ref:

以数组形式访问字符串会产生一个字符。在这里,你也可以互换地使用大括号和大括号。当PHP7.4中出现不推荐的访问数组的警告时,这一点很有帮助。我只需要将
$xyz[0]{0}
替换为
substr($xyz[0],0,1)
。当你得到它的时候很简单,但是在你得到它之前非常令人沮丧。。。谢谢。另请看@Jauzsika,如果你回来了,请接受,因为它的质量要好得多。虽然晚了数百万年,但请注意,你可以使用$array[]来推送,但不能使用$array{}@Vertig0,是的,可互换性是“用于访问数组元素”。值得注意的是,从PHP 7.4开始,不推荐使用大括号进行字符串偏移量/数组访问:使用大括号的数组和字符串偏移量访问语法是deprecated@SpongeBobPHPPants值得注意的是,从PHP7.4开始,字符串偏移量/数组访问的大括号就不推荐使用:数组和字符串偏移量访问语法PHP8.0中不推荐使用并删除了带花括号的