<?php
function ReturnArray() {
return array('a' => 'f', 'b' => 'g', 'c' => 'h', 'd' => 'i', 'e' => 'j');
}
echo ${!${!1}=ReturnArray()}['a']; // 'f'
?>
请解释一下上述解决方案中运行良好的 ${!1} 的计算逻辑和步骤。
最佳答案
让我们从一些基础知识开始。在 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'];
显然,它所做的第一件事是调用ReturnArray
。然后它计算 !1
,结果为 false。因此,${!1}
创建了一个名为 false
的变量,但不是字符串(?!)。之后,它对数组应用非操作。所有非空数组都是 true,因此 not 操作会将其更改为 false
。然后,它再次使用 ${}
语法来检索名为 false
的变量。然后,它使用数组访问来检索数组中键 'a'
的值。
我希望这是有道理的。
关于php - 帮我解释一下这个 PHP 片段 : returning array and immediately reference an index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398862/