我在一个应用程序中找到了这个PHP代码,我必须修改...
$links = mysql_query($querystring);
foreach (mysql_fetch_array($links) as $key=>$value)
{
$$key = $value;
}
我有点难过。
它是否真的迭代查询结果并将值复制到密钥中?
如果是这样,那会是什么意思?
另外,双$$符号是什么?我之前在PHP中没有看到这个,我似乎无法在PHP网站上找到它的引用。这是一个错字吗? 似乎影响代码。我不想在没有理解后果的情况下“修理”这样的事情。
答案 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。
基本上,代码将值复制到与键名称相同的变量中。