PHP $string{0} vs. $string[0];

39

在PHP中,您可以以几种不同的方式访问字符串的字符,其中之一是使用substr()函数。 您还可以使用花括号或方括号访问字符串中的第N个字符,像这样:

$string = 'hello';

echo $string{0}; // h
echo $string[0]; // h

我的问题是,它们之间有什么区别?{}和[]有什么不同之处吗?

谢谢。

4个回答

51

使用$string[0],另一种方法(花括号)已在PHP 8.0中删除。

对于字符串

在PHP 7.4中,使用{}语法访问字符串文字中的字符已被弃用。这在PHP 8.0中已被删除。

对于数组

在PHP 8.0.0之前,方括号和大括号可互换地用于访问数组元素(例如,在上面的示例中$ array [42]和$ array {42}均可执行相同的操作)。花括号语法已自PHP 7.4.0起过时,并在PHP 8.0.0中不再支持。


使用{}作为评估的方法也会被移除吗? 例如 ${$dynamic_object_name}->doStuff() - Jay
不,我相信他们的目标只是将访问字符串作为数组标准化。 - Owen
13
供日后参考,我想要注意的是,关于弯括号语法已经被弃用的那行文字已经在文档中删除了,大约三年前就被删除了。这意味着它不会很快或根本不会被弃用。 - Webmut
7
@Owen:PHP也使用 {} 进行数组访问。它一直都是这样的。(只是说一下) - hakre
因为过时而被踩了。PHP6从未出现过。Pacerier的答案现在更准确。 - John Hunt
1
这个答案在技术上是正确的,但应该更新以反映PHP7的现实,即$string{0}在7.4中已被弃用 - https://wiki.php.net/rfc/deprecate_curly_braces_array_access - aland

21

没有区别。 Owen的回答已经过时,PHP手册的最新版本不再指出其已被弃用 §:

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

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

然而,似乎更多的人/项目使用[],而且很多人甚至不知道{}是可行的。如果您需要向公众或不熟悉花括号语法的人分享代码,使用[] 可能是有益的。

更新: 使用{}访问字符串字符已被弃用,改用[]


我更喜欢花括号,因为它可以清晰地表明我正在访问字符串变量中的字符,而不是数组中的值。在某种程度上,这是相同的事情,但在代码层面上,它使得代码看起来更加美观。 - l008com

3

是的,没有区别。这种语言怪癖有一些历史...

最初,花括号语法旨在取代即将被弃用的方括号语法:

http://web.archive.org/web/20010614144731/http://www.php.net/manual/en/language.types.string.php#language.types.string.substr.

后来,这个政策被颠倒了,更喜欢使用方括号语法:

http://web.archive.org/web/20060702080821/http://php.net/manual/en/language.types.string.php#language.types.string.substr

甚至后来,花括号的写法也将被弃用:

http://web.archive.org/web/20080612153808/http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

截至目前,似乎已经撤销了弃用,并将它们视为两种备选语法:

http://web.archive.org/web/20160607224929/http://php.net/manual/en/language.types.string.php#language.types.string.substr


2

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