【问题标题】:PHP curly braces in array notation数组表示法中的 PHP 花括号
【发布时间】:2011-12-26 21:27:53
【问题描述】:

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

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

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

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

【问题讨论】:

标签: php arrays braces


【解决方案1】:

手册中提到{} 只是[] § Accessing array elements with square bracket syntax 的替代语法。自 PHP 7.4.0 起不推荐使用此方法,自 PHP 8.0.0 起不再支持

注意:

在 PHP 8.0.0 之前,方括号和花括号可以互换使用来访问数组元素(例如,$array[42] 和 $array{42} 在上面的示例中都可以做同样的事情)。花括号语法自 PHP 7.4.0 起已弃用,自 PHP 8.0.0 起不再支持。

字符串§ String access and modification by character 也是如此:

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

注意:在 PHP 8.0.0 之前,也可以使用大括号访问字符串,如 $str{42},用于相同目的。自 PHP 7.4.0 起,此花括号语法已被弃用,自 PHP 8.0.0 起不再支持。

【讨论】:

  • 迟到了数十亿年,但请注意,您可以执行 $array[] 来推送,但您不能执行 $array{}
  • @Vertig0,是的,可互换性是“用于访问数组元素”。
  • 值得注意的是,自 PHP 7.4 起,用于字符串偏移/数组访问的花括号已被弃用:不推荐使用带有花括号的数组和字符串偏移访问语法
  • @SpongeBobPHPPants 我喜欢他们收拾烂摊子。
  • 值得注意的是,自 PHP 7.4 起,用于字符串偏移/数组访问的花括号已被弃用:带花括号的数组和字符串偏移访问语法在 PHP 8.0 中已被弃用和删除
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    手册里有提到,但晦涩难懂:

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

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

    【讨论】:

    • 将字符串作为数组访问会产生一个字符。在那里,您也可以互换使用花括号和方括号。
    • 这在 PHP 7.4 中开始出现用于访问数组的弃用警告时有所帮助。我只需要将$xyz[0]{0} 替换为substr($xyz[0],0,1)。当你得到它时是如此简单,但在你得到它之前非常令人沮丧......谢谢。
    【解决方案4】:

    从 PHP 7.4 开始,花括号已被弃用以访问数组。

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2012-02-21
        • 1970-01-01
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2019-01-13
        • 2018-05-02
        相关资源
        最近更新 更多