数组表示法中的PHP花括号

Jau*_*ika 34 php arrays braces

我只是遇到了一个非常奇怪的PHP代码:

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

$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */
Run Code Online (Sandbox Code Playgroud)

它就像一个数组,但在手册中没有提到.这是什么?

Pac*_*ier 32

该手册中提到.{}只是[] §的替代语法:

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

字符串§:

通过使用方形数组括号指定字符串后所需字符的从零开始的偏移量,可以访问和修改字符串中的字符,如$str[42].将字符串视为用于此目的的字符数组.[...]

注意:为了相同的目的$str{42},也可以使用大括号访问字符串,如同.

  • 一年后的bazillions,但只是要注意你可以做$ array []来推,但你不能做$ array {} (10认同)
  • @ Vertig0,Yepp,可互换的"用于访问数组元素". (4认同)
  • 值得注意的是,自PHP 7.4起,不建议使用用于字符串偏移/数组访问的花括号:不建议使用带有花括号的数组和字符串偏移访问语法 (2认同)

Abe*_*nil 5

根据文档上的评论,它只是另一种表示法,可能设计为类似于 Perl 语法: http: //www.php.net/manual/de/language.types.array.php#99015

更新:当这个答案最初发布时,PHP 手册没有关于这个符号的任何官方信息。然而,到 2014 年,上面引用的评论已被删除,并且正如Pacerier 的回答所述,该符号已在手册中正式提及。


jbr*_*ahy 5

从 PHP 7.4 开始,不推荐使用大括号来访问数组。

https://wiki.php.net/rfc/deprecate_curly_braces_array_access


Mik*_*itt 4

手册上有提到,但很晦涩:

http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

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