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

Posted

技术标签:

【中文标题】这个使用 PHP $$ 语法的循环是做啥的?【英文标题】:What is this loop using PHP $$ syntax doing?这个使用 PHP $$ 语法的循环是做什么的? 【发布时间】:2009-06-25 01:25:16 【问题描述】:

我在需要修改的应用程序中发现了这个 php 代码...

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

    $$key = $value;

我有点难过。

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

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

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

【问题讨论】:

那些是“变量”us3.php.net/manual/en/language.variables.variable.php 【参考方案1】:

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

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

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

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

【讨论】:

谢谢。正是我需要知道的:)【参考方案2】:

你通常会看到这样写的。

$links = mysql_query($querystring);
while ($row = mysql_fetch_array($links)) 

    echo $row['id'];

$$ 就是所谓的variable variable。

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

【讨论】:

【参考方案3】:

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

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

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

输出是:“嗨”

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

以上是关于这个使用 PHP $$ 语法的循环是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

这个基数排序代码中的最后一个“for”循环是做啥的?

这个 php 操作符是做啥的? [复制]

学习pythy主要是做啥的

aspectj-weaver.jar 是做啥的?

PHP+MySQL是做啥的

CSS:这个星号 (*) 是做啥的?