2017-10-04 73 views
1

从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

为什么这是有趣的?

PhpStorm 2017年2月1日,与应用PHP 5.6DOES NOT检测该代码作为PHP只有7个可用

+0

无法复制:https://3v4l.org/b8Q0R。你可能不会运行你认为你是PHP的版本。 – Calimero

+0

我认为你的json $内容有一些问题,你可以分享$ conent – shashi

+1

'($ decode = json_decode($ content,true))['foo'];'5.6的语法不正确。看看https://3v4l.org/v3Tqt –

回答

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+中,您可以解引用生成数组的任何表达式。

+0

谢谢你的回答为什么它不起作用。 – schellingerht