<?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到“你好”.这实际上表示为$a =($b =($c =’hello’)));. $foo = value是一个表达式,在$foo设置后,将计算值.
你的代码语句如下所示:
echo ${!${!1}=ReturnArray()}['a'];
它的第一件事情显然是调用ReturnArray.然后评估!1,其计算结果为false.因此${!1}使一个名称为false的变量,而不是一个字符串(?!).之后,它对数组应用一个不操作.所有非空数组都是真实的,因此不会将操作更改为false.然后它再次使用该${}语法来检索名为false的变量.然后它使用数组访问来检索数组中的值“a”.
我希望是有道理的.