从PHP 5.4 ,我可以调用函数返回数组的元素,如下所示:func()['el']
。
我正在运行PHP 5.6 并测试以下(简化)代码:
$decoded = json_decode($content, true)['foo'];
($decoded = json_decode($content, true))['foo']; // syntax error ['
我不明白为什么我无法将json_decode($content, true)
分配给$decoded
并立即调用元素foo
。这在php 7
我的 PhpStorm 2017.2.1 ,已应用 php 5.6 不会仅将此代码检测为仅在PHP 7中提供!
答案 0 :(得分:3)
PHP 7引入的众多功能之一是Abstract Syntax Tree。这直接导致了更复杂的表达式,例如你问题中的表达式。
简单地说,更改是包含在括号中的函数返回与以前不相同的函数返回:
<?php
function foo() { return ['a' => 'b']; }
echo foo()['a']; // Works in PHP 5.4+
echo (foo())['a']; // Works in PHP 7+
正如你所提到的,功能数组解除引用是在5.4中添加的,但仅作为解析器中的特殊情况。在PHP 7+中,您可以取消引用任何产生数组的表达式。