为我解释PHP的这个片段:返回数组并立即引用索引

Pen*_*m10 12 php

<?php
function ReturnArray() {
    return array('a' => 'f', 'b' => 'g', 'c' => 'h', 'd' => 'i', 'e' => 'j');
}

echo ${!${!1}=ReturnArray()}['a']; // 'f'
?>
Run Code Online (Sandbox Code Playgroud)

请解释上述分辨率中那些$ {!1}运行良好的计算逻辑和步骤是什么.

ick*_*fay 6

让我们从一些基础知识开始.在PHP中,类似于hello将对字符串求值"hello".要引用变量,可以使用以下语法:${expr}.还有一个简写$foo,这将粗略评估:${"foo"}.

此外,您可能知道可以一次分配多个变量:$a=$b=$c='hello';例如.这将分配$a,$b以及$c'hello'.这实际上表示为$a=($b=($c='hello')));.$foo=value是一个表达式,在$foo设置之后,将评估为value.

您的代码语句如下所示:

echo ${!${!1}=ReturnArray()}['a'];
Run Code Online (Sandbox Code Playgroud)

它显然做的第一件事是电话ReturnArray.然后进行评估!1,评估为false.将${!1}因此使得与名称的变量false,虽然不是一个字符串(?!).之后,它对数组应用not操作.所有非空数组都是真实的,因此not操作将其更改为false.然后它再次使用该${}语法来检索名为的变量false.然后,它使用数组访问来检索数组中的键的值'a'.

我希望这是有道理的.