我在一个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。我理解使用,但我特别询问{}括号内的第二个$字符。
答案 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
的名为的变量中。
我可能无法解释它真的很好,这是我记得的一篇博文,所以它可能值得关注这个主题: