解释这个复杂的嵌套动态变量分配的示例,从函数调用

问题描述 投票:0回答:4
function ReturnArray() {
    return array('a' => 'f', 'b' => 'g', 'c' => 'h', 'd' => 'i', 'e' => 'j');
}

echo ${!${!1}=ReturnArray()}['a']; // 'f'

请解释在上述分辨率中使用的$ {!1}的逻辑和步骤是什么。

php function-call dynamic-variables
4个回答
5
投票
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


2
投票
!1
    = array('a'=>'f','b'=>'g','c'=>'h','d'=>'i',e'=>'j ')
  1. 现在$ null包含阵列
    同样,我们看到构造
  2. ${!1}
  3. ,意思是$ null(请参阅第一点和第二点),因此我们可以将其转换为:
  4. ${!1} = ReturnArray()
  5. (和$ null包含数组)
    
    
    
  6. 您可以轻松检查以下内容:

  7. ${!(condition)
    -您会看到数组;)
  8. $NULL['a']
  9. 评估
print_r(${NULL});


${!1}
评估

${false}

1
投票
!${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

0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.