我只是遇到了一个非常奇怪的PHP代码:
$oink{'pig'} = 1;
var_dump($oink);
$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */
它的工作方式类似于数组,但手册中没有提及。这是什么?
答案 0 :(得分:30)
手册中提到 。 {}
只是[]
§的替代语法:
方括号和花括号可用于可互换以访问数组元素(例如
$array[42]
和$array{42}
将在上面的示例中执行相同的操作。)< / p>
字符串§:
也是如此可以通过使用方形数组括号在字符串后面指定所需字符的从零开始的偏移来访问和修改字符串中的字符,如
$str[42]
中所示。 为此目的将字符串视为一个字符数组。 [...]注意:也可以使用大括号访问字符串,如
$str{42}
,用于相同目的。
答案 1 :(得分:4)
根据这篇关于文档的评论,它只是另一种符号,可能与Perl语法类似:http://www.php.net/manual/de/language.types.array.php#99015
更新:此答案最初发布时,PHP手册中没有关于此表示法的任何官方信息。然而,截至2014年,上述评论已被删除,并且正如Pacerier's answer says所述,该手册中已正式提及该符号。
答案 2 :(得分:3)
手册中提到了它,但它很晦涩:
http://www.php.net/manual/en/language.types.string.php#language.types.string.substr
简而言之,花括号只能访问一个字符(尝试添加一个完整的字符串,你会看到它只返回第一个字符)。它也被弃用了,所以我会避免使用它。
答案 3 :(得分:1)
不赞成使用自PHP 7.4起的大括号来访问数组。
https://wiki.php.net/rfc/deprecate_curly_braces_array_access
答案 4 :(得分:0)
使用花括号的数组和字符串偏移量访问从 PHP7.4 中被正式弃用 参考:https://www.php.net/manual/en/migration74.deprecated.php