在分配的函数返回数组上调用数组键?
Calling Array Key on Assigned Function Returned Array?
从 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 中可用!
PHP 7 引入的众多功能之一是 Abstract Syntax Tree。这直接导致了更复杂的表达式成为可能,例如您问题中的表达式。
简单地说,变化是以前用方括号包裹的函数 return 的行为与不在方括号中的函数的行为不同:
<?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+ 中,您可以取消引用任何生成数组的表达式。
从 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 中可用!
PHP 7 引入的众多功能之一是 Abstract Syntax Tree。这直接导致了更复杂的表达式成为可能,例如您问题中的表达式。
简单地说,变化是以前用方括号包裹的函数 return 的行为与不在方括号中的函数的行为不同:
<?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+ 中,您可以取消引用任何生成数组的表达式。