为什么在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
答案 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