Создание глобального var изнутри функции в PHP

Я пытаюсь определить динамические переменные. Я использую функцию для этого, но я не знаю, как определить новый 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; } 

    Рабочий код

    Помните, что они считаются плохой практикой, функция должна иметь локальные переменные, невидимые снаружи, и должна получать входные данные через переданные аргументы. Вы должны избегать получения аргументов, хотя глобальные переменные, и должны полностью исключить глобальные переменные.