38

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

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

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

它像一个数组一样工作,但手册中没有提到。这是什么?

4

5 回答 5

38

手册中有提到。{}只是[] § 使用方括号语法访问数组元素的替代语法。自 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 起不再支持。

于 2014-11-07T20:38:38.970 回答
5

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

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

于 2011-11-11T09:57:10.420 回答
4

它在手册中提到,但它是模糊的:

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

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

于 2011-11-11T09:57:03.020 回答
3

自 PHP 7.4 起,大括号不推荐用于访问数组。

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

于 2019-12-22T19:24:01.280 回答
0

PHP7.4正式弃用使用花括号的数组和字符串偏移访问 参考:https ://www.php.net/manual/en/migration74.deprecated.php

于 2020-05-25T21:38:12.120 回答