为什么在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
为什么在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
$obj->foo()['bar'];
在 PHP >= 5.4.0 中有效
$obj->foo()->['bar']
即使您添加了所需的,在任何版本中都无效;
因此,在 5.4.0 之前的版本中,您将在第一行收到一个解析错误,该错误将停止执行并且不会在下一行显示解析错误。
在 5.4.0 及更高版本中,第一行有效,但第二行出现解析错误。所以如果你反转它们,你总是会得到$obj->foo()->['bar']
任何版本的解析错误。
您的第一个示例从未有效。
$obj->foo()->['bar']; // is invalid in any PHP implementation
但是,使用方法链接支持:如果$obj->foo()
返回具有bar
属性的对象,这将起作用:
$obj->foo()->bar;
支持
$obj->foo()['bar'];
出现在 PHP 5.4.0 中,因为仅从该版本添加了对函数数组取消引用的支持。
这个有用的页面解释了它: https ://wiki.php.net/rfc/functionarraydereferencing