通过方法访问数组

时间:2013-11-15 00:06:13

标签: php

为什么在PHP 5.3.8

$obj->foo()['bar']; // syntax error
$obj->foo()->['bar']; // valid

但是在PHP 5.4.9中它反过来了:

$obj->foo()['bar']; // valid
$obj->foo()->['bar'] // syntax error

4 个答案:

答案 0 :(得分:2)

$obj->foo()['bar'];在PHP中有效> = 5.4.0

即使您添加了必需的$obj->foo()->['bar']

;在任何版本中都无效

因此,在5.4.0之前的版本中,您将在第一行上获得一个解析错误,该错误将停止执行,并且不会在下一行显示解析错误。

在版本5.4.0及更高版本中,第一行有效但第二行会出现解析错误。因此,如果您反转它们,您将始终在任何版本中获得$obj->foo()->['bar']的解析错误。

答案 1 :(得分:2)

在任何PHP版本中,示例$obj->foo()->['bar']永远不会有效; see here

也许你误解了$obj->foo()->{'bar'}之类的语法; see here

示例$obj->foo()['bar']在PHP> = 5.4.0中有效; see here

答案 2 :(得分:0)

你的第一个例子从未有效。

$obj->foo()->['bar']; // is invalid in any PHP implementation 

但是使用方法链支持:如果$obj->foo()返回一个具有bar属性的对象,这将起作用:

$obj->foo()->bar;

答案 3 :(得分:0)

支持

$obj->foo()['bar'];

来自PHP 5.4.0,因为仅从该版本添加了对函数数组解除引用的支持。

这个有用的页面解释了它: https://wiki.php.net/rfc/functionarraydereferencing