2

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

4 回答 4

2

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

$obj->foo()->['bar']即使您添加了所需的,在任何版本中都无效;

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

在 5.4.0 及更高版本中,第一行有效,但第二行出现解析错误。所以如果你反转它们,你总是会得到$obj->foo()->['bar']任何版本的解析错误。

于 2013-11-15T00:12:07.440 回答
2

在任何 PHP 版本中,示例$obj->foo()->['bar']都永远无效;看这里

也许你把它弄错了语法,比如$obj->foo()->{'bar'}; 看这里

示例$obj->foo()['bar']从 PHP >= 5.4.0 开始有效;看这里

于 2013-11-15T00:16:58.943 回答
0

您的第一个示例从未有效。

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

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

$obj->foo()->bar;
于 2013-11-15T00:12:08.747 回答
0

支持

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

出现在 PHP 5.4.0 中,因为仅从该版本添加了对函数数组取消引用的支持。

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

于 2013-11-15T00:15:24.680 回答