Я пытаюсь определить динамические переменные. Я использую функцию для этого, но я не знаю, как определить новый 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'];
Эта функция делает это для меня. Я не понимаю, почему в этом случае это может быть опасно .. или как обычно, я чего-то не хватает.
Попробуй это:
function doSomething() { global $x; $x = 5; }
Если вы предпочитаете сохранять пару байтов, для этого можно использовать массив $_GLOBALS
:
$_GLOBALS['x'] = 5;
Что касается вашего редактирования: это делает ваш код менее понятным.
На самом деле уже существует функция, которая делает это: 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; // ... }
Вы можете сделать это двумя способами:
Сделайте глобальную переменную глобальным:
function fun1() { global $foo; $foo = 1; }
В качестве альтернативы вы также можете создать новый элемент в массиве $GLOBALS
:
function fun2() { $GLOBALS['bar'] = 1; }
Рабочий код
Помните, что они считаются плохой практикой, функция должна иметь локальные переменные, невидимые снаружи, и должна получать входные данные через переданные аргументы. Вы должны избегать получения аргументов, хотя глобальные переменные, и должны полностью исключить глобальные переменные.