2017-10-04 6 views
1

, 정말 같은 요소에게 기능 반환 된 배열를 호출 할 수 func()['el']. 할당 된 함수 반환 배열에서 배열 키 호출? PHP <strong>5.4</strong>에서

($decoded = json_decode($content, true))['foo']; // syntax error [' 

나는 이유를 이해하지 않습니다

$decoded = json_decode($content, true)['foo']; 

작품

가 작동하지 않습니다

나는 PHP에게 5.6을 실행하고 다음 (간체) 코드를 테스트하고 있습니다 json_decode($content, true)$decoded에 할당 할 수없고 즉시 foo 요소를 호출 할 수 없습니다. 이것은 PHP에서 잘 작동합니다

왜 이것이 재미 있습니까? 적용 PHP 5.6

PhpStorm 2017년 2월 1일는 PHP 7에서만 사용할 수 으로이 코드를 감지하지 않습니다!

+0

은 재생산 할 수 없습니다 : https://3v4l.org/b8Q0R. 당신이 생각하는 PHP 버전을 실행하지 않을 수도 있습니다. – Calimero

+0

당신의 json $ content에 약간의 문제가 있다고 생각합니다. $ conent – shashi

+1

'($ decoded = json_decode ($ content, true)) [ 'foo'];'5.6 구문이 올바르지 않습니다. https://3v4l.org/v3Tqt –

답변

3

PHP 7에서 소개 한 많은 기능 중 하나는 Abstract Syntax Tree입니다. 이렇게하면 질문에있는 것과 같이 더 복잡한 표현이 가능해졌습니다.

당신이 언급으로

기능 배열, 5.4에 추가 된 역 참조

<?php 
function foo() { return ['a' => 'b']; } 

echo foo()['a']; // Works in PHP 5.4+ 
echo (foo())['a']; // Works in PHP 7+ 
만 :

단순히 변화는 괄호에 싸여 함수 반환 이전에없는 하나로서 동일하게 동작하지 않은 것입니다 파서의 특별한 경우. PHP 7+에서는 배열을 생성하는 모든 표현을 역 참조 할 수 있습니다.

+0

그것이 작동하지 않는 이유에 대한 답변 해 주셔서 감사합니다. – schellingerht