2017-10-04 81 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