我正在尝试定义动态变量。我正在使用一个函数,但我不知道如何将新var定义为全局(因为它从未在函数之前创建)。
可能吗?
感谢。
function extract_values($row) {
foreach ($row as $key => $value){
global $$key;
$$key = $value;
}
}
然后我试图让我的生活更轻松:
$result = mysql_query("SELECT first_name, last_name, address FROM users ORDER BY id ASC");
while ($row = mysql_fetch_array($result)){
extract_values($row);
#[do some stuff with the variables.]#
}
我这样做是为了节省时间。而不是为每一列创建它自己的变量,如
$first_name = $row['first_name'];
这个功能对我有用。 我不明白为什么在这种情况下它可能是危险的.. 或者像我们一样,我错过了一些东西..
答案 0 :(得分:5)
试试这个:
function doSomething() {
global $x;
$x = 5;
}
如果您希望保存几个字节,可以使用$_GLOBALS
数组:
$_GLOBALS['x'] = 5;
答案 1 :(得分:3)
关于您的编辑:它使您的代码不易理解。
实际上,已经有一个功能正在执行此操作:extract()
。
while (($row = mysql_fetch_assoc($result))){
extract($row);
// ...
}
extract()
甚至更好,因为它允许您指定在变量已存在时应该发生的事情和/或允许您指定前缀(因此您不会用该名称覆盖已存在的变量)。例如。你可以这样做:
extract($row, EXTR_PREFIX_ALL, 'db');
会导致$db_first_name
等。
Surly,extract()
也在做一些内部工作,但使用内置函数总是比创建自己的函数更好。
另一种可能性是使用list()
:
while (($row = mysql_fetch_row($result))){
list($first_name, $last_name, $address) = $row;
// ...
}
答案 2 :(得分:2)