php - 帮我解释一下这个 PHP 片段 : returning array and immediately reference an index

标签 php

<?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/

相关文章:

javascript - jQuery、AJAX 和 MySQL 中的复选框问题

php filemtime 24 小时格式

php - Mysql结果数组查找

php - 检查一个数组是否有一个或多个空值

php - 当我们使用 MasterCard 时,PayPal Pro 是否必须填写地址字段?

php - 需要创建 sql 查询的建议

php - WooCommerce 分页 + Ajax WP_Query

php - 无效的 ID Laravel Eloquent

php - 如何在 for 循环中仅回显一次某些文本?

php - 对象分配在 PHP OOP 中没有意义