(PHP 4, PHP 5, PHP 7, PHP 8)
extract — Переводит элементы массива в переменные текущей таблицы символов
Функция импортирует переменные в текущую таблицу символов на основе элементов массива.
Функция проверяет каждый ключ на соответствие правилам именования переменных и обрабатывает конфликты имён с переменными текущей таблицы символов.
array
Ассоциативный массив. Функция интерпретирует ключи массива
как названия переменных, а значения элементов — как значения переменных.
На основе каждой пары «ключ — значение» функция создаст
или обновит переменную в текущей таблице символов
с учётом значений параметров flags и prefix.
Функция ожидает ассоциативный массив; импорт переменных на основе элементов индексного массива
выполняется только при передаче флага EXTR_PREFIX_ALL
или EXTR_PREFIX_INVALID.
flags
Параметр flags определяет способ
обработки недопустимых или числовых ключей и коллизий. Параметр
принимает следующие значения:
EXTR_OVERWRITEEXTR_SKIPEXTR_PREFIX_SAMEprefix.
EXTR_PREFIX_ALLprefix к названию каждой переменной.
EXTR_PREFIX_INVALIDprefix
только к недопустимым или числовым названиям переменных.
EXTR_IF_EXISTSEXTR_PREFIX_IF_EXISTSEXTR_REFSarray.
Флаг работает отдельно или в комбинации с другими флагами
параметра flags при объединении через побитовое ИЛИ.
Значение параметра flags
по умолчанию равно EXTR_OVERWRITE.
prefix
Обратите внимание, параметр prefix
обязателен только при установке для параметра flags
флагов EXTR_PREFIX_SAME,
EXTR_PREFIX_ALL,
EXTR_PREFIX_INVALID
или EXTR_PREFIX_IF_EXISTS.
Переменная не импортируется в текущую таблицу символов,
если после добавления префикса создаётся
недопустимое название переменной. Между префиксом и ключом массива
автоматически вставляется символ подчёркивания: prefix_key.
Функция возвращает количество переменных, затронутых в таблице символов.
Пример #1 Пример импорта переменных функцией extract()
<?php
$size = "large";
$var_array = array(
"color" => "blue",
"size" => "medium",
"shape" => "sphere"
);
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";Результат выполнения приведённого примера:
blue, large, sphere, medium
Переменная $size не перезаписалась
из-за установки флага EXTR_PREFIX_SAME,
поэтому функция создала переменную $wddx_size.
При установке флага EXTR_SKIP
функция не создала бы переменную $wddx_size.
С флагом EXTR_OVERWRITE
переменная $size получила бы
значение "medium", а при установке флага EXTR_PREFIX_ALL
функция создала бы
переменные $wddx_color,
$wddx_size и $wddx_shape.
Функцией extract() опасно извлекать переменные из ненадёжных данных
наподобие суперглобальных переменных $_GET или $_FILES, которые содержат пользовательский ввод.
При вынужденном извлечении ненадёжных данных в параметр flags
передают константу EXTR_SKIP или другой флаг, который запрещает перезапись текущих значений,
и извлекают переменные с учётом порядка значений
в директиве variables_order
файла php.ini.