提问人:nedlud 提问时间:6/25/2009 最后编辑:chaosnedlud 更新时间:7/19/2009 访问量:186
这个循环使用 PHP $$ 语法是做什么的?
What is this loop using PHP $$ syntax doing?
问:
我在我必须修改的应用程序中找到了这个PHP代码......
$links = mysql_query($querystring);
foreach (mysql_fetch_array($links) as $key=>$value)
{
$$key = $value;
}
我有点难住了。
它真的是循环访问查询结果并将值复制到键中吗?
如果是这样,这有什么意义呢?
另外,什么是双 $$ 表示法?我以前没有在PHP中看到过这个,我似乎在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。
因此,基本上该代码将值复制到与键同名的变量中。
上一个:如何访问基于数组中字符串的方法?
下一个:如何从带有变量的类中调用方法?
评论