这个使用 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 $$ 语法的循环是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章