2

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

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

我有点难过。

它真的是遍历查询结果并将值复制到键中吗?

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

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

4

4 回答 4

4

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

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

您刚刚设置$foo'bar'.

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

于 2009-06-25T01:29:01.710 回答
2

你一般会看到这样写的。

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

$$ 就是所谓的变量 variable

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

于 2009-06-25T01:29:32.647 回答
1

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

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

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

输出是:“嗨”

于 2009-06-25T01:30:15.373 回答
1

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

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

这将打印 15。它需要 $vara 并获得“some”,因此由于第二个 $,它会将其作为变量名,并打印 $some 的值为 15。

所以基本上该代码是将值复制到与键同名的变量中。

于 2009-06-25T01:34:24.070 回答