【问题标题】:Returning arrays in php causes syntax error在php中返回数组会导致语法错误
【发布时间】:2010-12-15 04:45:20
【问题描述】:
function get_arr() {
    return array("one","two","three");
}

echo get_arr()[0];

为什么上面的代码会抛出以下错误?

解析错误:语法错误,意外'['

【问题讨论】:

标签: php


【解决方案1】:

你也可以

 list($firstElement) = get_arr();

【讨论】:

    【解决方案2】:

    这只是 PHP 语法的一个限制。如果函数返回数组,则不能索引函数的返回值。您的功能没有问题;相反,这显示了 PHP 的自制特性。就像一个katamari 球一样,随着时间的推移,它以一种相当随意的方式增加了特征和语法。从一开始就没有考虑到这一点,这种句法限制就是证明。

    同样,即使是这种更简单的构造也不起作用:

    // Syntax error
    echo array("one", "two", "three")[0];
    

    要解决它,您必须将结果分配给一个变量,然后索引该变量:

    $array = get_arr();
    echo $array[0];
    

    奇怪的是,他们用对象做对了。 get_obj()->prop 在语法上有效并且按预期工作。去图吧。

    【讨论】:

    • 感谢您花时间证实我的怀疑。
    • +1 用于 Katamari 参考 return (object) $result PHP 文档:“数组转换为具有由键命名的属性和相应值的对象。” php.net/manual/en/language.types.object.php
    【解决方案3】:

    确实,你不是唯一一个想要这样的功能增强的人:PHP Bug 报告#45906

    【讨论】:

      【解决方案4】:

      我很确定你是否这样做:

      $myArray = get_arr();
      echo $myArray[0];
      

      它会起作用的。不能直接使用bracket。

      【讨论】:

        【解决方案5】:

        “因为你做不到”这不是一个非常令人满意的答案。但事实就是如此。你不能这样做function_which_returns_array()[$offset];你必须将返回值存储在一个$var中然后访问它。

        【讨论】:

          【解决方案6】:

          您不能像那样直接引用返回的数组。您必须将其分配给一个临时变量。

          $temp = get_arr();
          echo $temp[0];
          

          【讨论】:

            猜你喜欢
            • 2018-03-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-29
            • 2021-09-26
            • 1970-01-01
            相关资源
            最近更新 更多