4

我在一个 WordPress 插件中遇到了这个问题。

$stuff = $wpdb->get_results(" assume valid database query here ");
foreach ($stuff as $cur)
    ${$cur->type}[] = $cur->name;

$stuff将是一个包含更多数据库行对象的对象。这些数据库行将包含'id''type'和列'name'。该'type'列将包含以下三个字符串之一:'file''url''code'

看起来此代码片段可能会为名为 、 和/或 的数组创建或添加$file$url元素$code。但是,我不熟悉 ${$ } 语法的这种用法。我只在双引号字符串中看到它以避免解析问题。

我对这段代码的分析是否正确?在哪里可以了解有关 ${$ } 语法的这种用法的更多信息?

有一个关于双引号字符串中的 ${ } 语法的问题。我理解这种用法​​,但我特别询问 { } 大括号内的第二个 $ 字符。

4

3 回答 3

4

考虑

$foo = 42;
$a = 'foo';
echo $$a; // Prints 42

这称为变量变量,因为变量的名称是在运行时确定的。但是 $$a[1] 和 ${$a[1]} 一样还是和 {$$a}[1] 一样?括号避免了这种歧义,就像它们在处理数学中的运算符优先级时所做的那样。

于 2013-08-21T20:32:59.527 回答
4

这是一个“变量”。在这种情况下,它指的是名为whatever is in 的变量中的数组$cur->type

我个人讨厌这个,并且更愿意这样做:

$someArray[$cur->type][] = $cur->name;
于 2013-08-21T20:24:28.210 回答
2

那些大括号打开一个字符串上下文,将其中的表达式评估为一个字符串,然后将其用作变量名。

例如,如果你想写一个你永远无法用普通 PHP 写的名字的变量:

echo $;

具有空名称的变量。PHP 会给你一个语法错误。但是,您可以使用大括号创建此类变量:

${''} = 'hello';
echo ${''}; # prints "hello"

那是一个名称为空的变量。如果您想先评估变量名,这会很有帮助:

${$cur->type}[]
| ### 1. ###|
`---- 2. ---´

这使您可以清楚地说出数组的位置。在名为的变量中$cur->type

我可能无法很好地解释它,这是我记得的一篇博客文章,所以它可能值得讨论这个话题:

于 2013-08-21T20:28:02.053 回答