在分配的函数返回数组上调用数组键?

时间:2017-10-04 08:04:45

标签: php arrays php-5.6

从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中提供!

1 个答案:

答案 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+中,您可以取消引用任何产生数组的表达式。