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

What is this loop using PHP $$ syntax doing?

提问人:nedlud 提问时间:6/25/2009 最后编辑:chaosnedlud 更新时间:7/19/2009 访问量:186

问:

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

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

我有点难住了。

它真的是循环访问查询结果并将值复制到键中吗?

如果是这样,这有什么意义呢?

另外,什么是双 $$ 表示法?我以前没有在PHP中看到过这个,我似乎在PHP网站上找不到它的参考。是错别字吗?它似乎不会影响代码。我不想在不了解后果的情况下去“修复”这样的事情。

php sql 变量

评论

2赞 BlackTigerX 6/25/2009
这些是“变量”us3.php.net/manual/en/language.variables.variable.php

答:

4赞 chaos 6/25/2009 #1

这不是错别字;这是您与由另一个变量命名的变量交互的方式。就像你这样做一样$$

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

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

循环正在做的是将行内容扩展到当前变量命名空间中,有点像 extract()。这是一种糟糕的方法,尤其是因为它也在迭代数字索引。

2赞 alex 6/25/2009 #2

你通常会看到这样写的。

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

$$ 就是所谓的变量变量

看起来它本质上是将键作为保存值的变量。有点像register_globals对 POST/GET 等变量的作用。我不建议这样做。我敢说这会导致问题,比如覆盖变量,以及意外的变量可用。

1赞 Sev 6/25/2009 #3

它根据 sql 查询结果和结果结构创建键值对。

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

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

输出为:“hi”

1赞 Tom Kiley 6/25/2009 #4

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

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

这将打印 15。它接受 $vara 并得到“一些”,因此由于第二个 $,它将其作为变量名称,并打印 $some 的值,即 15。

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