在PHP中,$ {$}语法有什么作用?

时间:2013-08-21 20:23:06

标签: php syntax

我在一个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的数组创建或添加新元素。但是,我不熟悉$ {$}语法的这种用法;我只在双引号字符串中看到它以避免解析问题。

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

双引号字符串中有一个question about the ${ } syntax。我理解使用,但我特别询问{}括号内的第二个$字符。

3 个答案:

答案 0 :(得分:4)

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

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

$someArray[$cur->type][] = $cur->name;

答案 1 :(得分:3)

考虑

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

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

答案 2 :(得分:2)

这些花括号打开一个字符串上下文,将表达式计算到一个字符串中,然后将其用作变量名。

例如,如果你想用一个名字来编写一个你永远不会用普通PHP编写的变量:

echo $;

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

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

这是一个空名称的变量。如果要首先评估变量名称,这可能会有所帮助:

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

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

我可能无法解释它真的很好,这是我记得的一篇博文,所以它可能值得关注这个主题: