使用PHP $$语法的循环是什么?

时间:2009-06-25 01:25:17

标签: php sql variable-variables

我在一个应用程序中找到了这个PHP代码,我必须修改...

$links = mysql_query($querystring);
foreach (mysql_fetch_array($links) as $key=>$value) 
{
    $$key = $value;
}

我有点难过。

它是否真的迭代查询结果并将值复制到密钥中?

如果是这样,那会是什么意思?

另外,双$$符号是什么?我之前在PHP中没有看到这个,我似乎无法在PHP网站上找到它的引用。这是一个错字吗? 似乎影响代码。我不想在没有理解后果的情况下“修理”这样的事情。

4 个答案:

答案 0 :(得分:4)

$$不是拼写错误;它是你如何与另一个变量命名的变量进行交互。就像你做的那样

$varname = 'foo';
$$varname = 'bar';

您刚刚将$foo设置为'bar'

循环正在做的是将行内容扩展到当前变量名称空间,类似于extract()。这是一种可怕的方式,尤其是因为它也在迭代数字索引。

答案 1 :(得分:2)

你通常会看到这样写的。

$links = mysql_query($querystring);
while ($row = mysql_fetch_array($links)) 
{
    echo $row['id'];
}

$$是所谓的variable variable

看起来它实际上是将密钥作为拥有该值的变量。 register_globals对POST / GET等变量做了什么。我不建议这样做。我敢说它会导致问题,例如覆盖变量,以及可用的意外变量。

答案 2 :(得分:1)

它基于sql查询结果和结果结构创建键值对。

至于$$,它只是另一个变量,除了这次它是设置为变量的结果。

$key = "hello";
$$key = "hi";
echo $key;

输出为:“hi”

答案 3 :(得分:1)

$$将引用变量,其名称存储在第一个变量中。例如:

$var='some';
$some=15;
echo $$var;

这将打印15.它需要$ vara并获得'some',因此它将其作为变量名称,因为第二个$并且它打印$ some的值为15。

基本上,代码将值复制到与键名称相同的变量中。