PHP数组表示法中的花括号

44

我刚刚看到了一段非常奇怪的PHP代码:

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

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

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


另请参见https://dev59.com/hHRC5IYBdhLWcg3wUvUS。 - Pacerier
@Jauzsika,如果您回来的话,请接受Pacerier的答案,因为它的质量要好得多。 - Phil
5个回答

44

在手册中提到过,{}只是[]的另一种语法表达方式,用于访问数组元素,详情请见§ 使用方括号语法访问数组元素。自PHP 7.4.0起,这种方法已被弃用,自PHP 8.0.0起就不再支持了。

注意:

在 PHP 8.0.0之前,对于访问数组元素,方括号和花括号可以互换使用(例如,在上面的示例中,$array[42] 和 $array{42} 执行的操作相同)。从PHP 7.4.0开始,花括号语法已被弃用,并在PHP 8.0.0中不再支持。

对于字符串也是同样的情况,详情请见§ 通过字符进行访问和修改字符串:

可以使用方括号来指定字符串中所需字符的从零开始的偏移量进行访问和修改,例如 $str[42]。在此目的下,将字符串视为字符数组即可[...]。

注意:在 PHP 8.0.0之前,也可以使用花括号来访问字符串,例如 $str{42},具有相同的目的。从PHP 7.4.0开始,这种花括号语法已被弃用,并在PHP 8.0.0中不再支持。


14
虽然已经晚了无数年,但是需要注意的是你可以使用"$array[]"来进行压入(push),但不能使用"$array{}"。 - Vertig0
4
可以,@Vertig0,是的,“可互换性”指的是“访问数组元素”。 - Pacerier
4
值得注意的是,自PHP 7.4起,使用大括号进行字符串偏移/数组访问已被弃用:使用大括号的数组和字符串偏移访问语法已经过时。 - SpongeBobPHPants
@SpongeBobPHPPants 我喜欢他们清理这个混乱。 - Robo Robok
1
值得注意的是,自PHP 7.4起,使用花括号进行字符串偏移/数组访问已被弃用:带有花括号的数组和字符串偏移访问语法已被弃用,并在PHP 8.0中删除。 - Mateus Viccari

5

5

4

1
将字符串作为数组访问会得到一个字符。在这里,你也可以交替使用花括号和方括号。 - Frank Kusters
这对于在 PHP 7.4 中访问数组时出现弃用警告非常有帮助。我只需要用 substr($xyz[0],0,1) 替换 $xyz[0]{0}。当你理解了它,它就变得如此简单,但在理解之前非常令人沮丧...谢谢。 - ZZ-bb

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接