Что делает этот цикл с использованием синтаксиса PHP $$?
Я нашел этот код PHP в приложении, которое я должен изменить...
$links = mysql_query($querystring);
foreach (mysql_fetch_array($links) as $key=>$value)
{
$$key = $value;
}
Я немного озадачен.
Это действительно перебирает результаты запроса и копирует значение в ключ?
Если так, какой смысл в этом?
Кроме того, что такое двойная нотация $$? Я не видел этого раньше в PHP, и я не могу найти ссылку на это на сайте PHP. Это опечатка? Кажется, это не влияет на код. Я не хочу "чинить" что-то подобное, не понимая последствий.
4 ответа
$$
не опечатка; это то, как вы взаимодействуете с переменной, названной другой переменной. Нравится, если вы делаете
$varname = 'foo';
$$varname = 'bar';
вы только что установили $foo
в 'bar'
,
Цикл выполняет расширение содержимого строки в текущее пространство имен переменных, что-то вроде extract (). Это ужасный способ сделать это, не в последнюю очередь потому, что он также перебирает числовые индексы.
Вы обычно видите, что написано так.
$links = mysql_query($querystring);
while ($row = mysql_fetch_array($links))
{
echo $row['id'];
}
$$ - это то, что называется переменной переменной.
Похоже, он по сути делает ключи как переменные, содержащие значение. Вроде того, что register_globals делает с POST/GET и т. Д. Я бы не рекомендовал делать это так. Я осмелюсь сказать, что это приведет к таким проблемам, как перезапись переменных и появление неожиданных переменных.
$$ будет ссылаться на переменную с именем, хранящимся в первой переменной. Так, например:
$var='some';
$some=15;
echo $$var;
Это выведет 15. Он берет $ vara и получает 'some', поэтому он принимает это как имя переменной из-за второго $ и выводит значение $ some, которое равно 15.
Таким образом, в основном этот код копирует значения в переменную, имя которой совпадает с именем ключа.
Он создает пары ключ-значение на основе результатов SQL-запроса и структуры результатов.
Что касается $$, это просто другая переменная, за исключением того, что на этот раз это результат, который установлен в переменную.
$key = "hello";
$$key = "hi";
echo $key;
вывод: "привет"