function ReturnArray() {
return array('a' => 'f', 'b' => 'g', 'c' => 'h', 'd' => 'i', 'e' => 'j');
}
echo ${!${!1}=ReturnArray()}['a']; // 'f'
请解释在上述分辨率中使用的$ {!1}的逻辑和步骤是什么。
hello
会评估字符串
"hello"
。要引用变量,您可以使用此语法:${expr}
。还有一个速记,$foo
,它将大致评估以下内容:${"foo"}
.。,您也可能知道您可以一次分配多个变量:例如。这将把
$a=$b=$c='hello';
,
$a
和$b
分配给$c
。这实际上表示为'hello'
。 $a=($b=($c='hello')));
是一个表达式,在设置$foo=value
后,将评估为$foo
。
您的代码语句看起来像这样:value
显然,它要做的第一件事是调用。然后,它评估了评估为false的
echo ${!${!1}=ReturnArray()}['a'];
。因此,
ReturnArray
使其具有名称
!1
的变量,尽管不是字符串(?!)。之后,它适用于数组。所有非空数阵列都是真实的,因此不操作将其更改为
${!1}
。然后,它再次使用false
语法来检索名为false
的变量。然后,它使用数组访问来检索键${}
的数组中的值。
我希望这很有意义。
false
= false'a'
= null
!1
现在$ null包含阵列同样,我们看到构造
${!1}
${!1} = ReturnArray()
${!(condition)
-您会看到数组;)
$NULL['a']
print_r(${NULL});
${!1}
评估${false}
!${false = ReturnArray()}
产生
$true = array('a' => 'f', /* etc */)
echo $true['a']
对应于索引'f'
'f'
我很好奇,这是什么?
'a'
Imho,这主要是纯粹的噪音。该代码将数组分配给变量,然后检索键
echo ${!${!1}=ReturnArray()}['a'];
${!${!1}=ReturnArray()}['a']
!1 resolves to false.
${!${false}=ReturnArray()}['a']
false resolves to... I don't know. Let's just say false resolves to a variable "a".
${!$a=ReturnArray()}['a']
$a is now the array. The ! changes the returned array into the boolean false (like: if (!$handle = fopen('x', 'r')) { echo 'connection failed' }.
${false}['a']
I don't know what false resolves to, but we're using again variable "a".
$a['a'] // this is trivial
,显然是
a