1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 00:32:15 +01:00
Files
archived-doc-ru/reference/array/functions/extract.xml
2024-01-16 01:02:25 +03:00

274 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.extract" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>extract</refname>
<refpurpose>Импортирует переменные массива в текущую таблицу символов</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>extract</methodname>
<methodparam><type>array</type><parameter role="reference">array</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer><constant>EXTR_OVERWRITE</constant></initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>prefix</parameter><initializer>""</initializer></methodparam>
</methodsynopsis>
<para>
Импортирует переменные массива в текущую таблицу символов.
</para>
<para>
Функция проверяет каждый ключ массива, чтобы увидеть, содержит ли он допустимое имя переменной.
Будут также проверены совпадения (коллизии) с существующими переменными
в таблице символов.
</para>
<warning>
<para>
Не вызывайте функцию <function>extract</function> с ненадёжными данными
наподобие пользовательского ввода
(например, с суперглобальными переменными <varname>$_GET</varname>, <varname>$_FILES</varname>).
</para>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>array</parameter></term>
<listitem>
<para>
Ассоциативный массив. Функция трактует ключи массива
как имена переменных, а значения — как значения
переменных. Для каждой пары ключ/значение будет создана
переменная в текущей таблице символов с учётом
флагов (<parameter>flags</parameter>)
и параметров префикса (<parameter>prefix</parameter>).
</para>
<para>
Без флагов <constant>EXTR_PREFIX_ALL</constant>
или <constant>EXTR_PREFIX_INVALID</constant> функция работает
только с ассоциативными массивами;
индексный массив не даст результатов.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Параметр <parameter>flags</parameter> определяет способ
трактовки неправильных/числовых ключей и коллизий. Разрешено
указывать одно из следующих значений:
<variablelist>
<varlistentry>
<term><constant>EXTR_OVERWRITE</constant></term>
<listitem>
<simpara>
Если переменная с таким именем существует, она будет перезаписана.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_SKIP</constant></term>
<listitem>
<simpara>
Если переменная с таким именем существует, её текущее значение
не будет перезаписано.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_SAME</constant></term>
<listitem>
<simpara>Если переменная с таким именем существует, к её имени
будет добавлен префикс, определённый параметром
<parameter>prefix</parameter>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_ALL</constant></term>
<listitem>
<simpara>
Добавить префикс <parameter>prefix</parameter> ко всем именам переменных.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_INVALID</constant></term>
<listitem>
<simpara>
Добавить префикс <parameter>prefix</parameter> только к
некорректным/числовым именам переменных.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_IF_EXISTS</constant></term>
<listitem>
<simpara>
Перезаписать только те переменные, которые содержатся
в текущей таблице символов, иначе ничего не делать.
Это полезно для определения списка
допустимых переменных и извлечения только тех
из них, которые разработчик уже определил, например, из массива
наподобие <varname>$_REQUEST</varname>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_IF_EXISTS</constant></term>
<listitem>
<simpara>
Создать только префикс-версии переменных, если версия
переменной без префикса уже содержится в текущей таблице символов.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_REFS</constant></term>
<listitem>
<simpara>
Извлечь переменные как ссылки. Это фактически означает, что
значения импортированных переменных всё ещё будут ссылаться
на значения массива <parameter>array</parameter>.
Разрешено указывать этот флаг отдельно или
комбинировать его с другими значениями
параметра <parameter>flags</parameter> через побитовое «ИЛИ».
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
Если параметр <parameter>flags</parameter> не задан, он
трактуется как флаг <constant>EXTR_OVERWRITE</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>prefix</parameter></term>
<listitem>
<para>
Обратите внимание, что префикс (<parameter>prefix</parameter>)
нужен, только если параметру <parameter>flags</parameter>
установлено значение <constant>EXTR_PREFIX_SAME</constant>,
<constant>EXTR_PREFIX_ALL</constant>,
<constant>EXTR_PREFIX_INVALID</constant>
или <constant>EXTR_PREFIX_IF_EXISTS</constant>. Если
в результате добавления префикса не будет получено
допустимое имя переменной, она не будет импортирована
в текущую таблицу символов.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает количество переменных, успешно импортированных в таблицу символов.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования функции <function>extract</function></title>
<para>
Функцию <function>extract</function> также вызывают
для импорта в таблицу символов переменных,
содержащихся в ассоциативном массиве, возвращаемом функцией
<function>wddx_deserialize</function>.
</para>
<programlisting role="php">
<![CDATA[
<?php
/* Предположим, что переменная $var_array — это массив, который вернула
функция wddx_deserialize */
$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";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
blue, large, sphere, medium
]]>
</screen>
<para>
Переменная <varname>$size</varname> не была перезаписана,
потому что был установлен флаг <constant>EXTR_PREFIX_SAME</constant>,
поэтому была создана переменная <varname>$wddx_size</varname>.
Если был бы определён флаг <constant>EXTR_SKIP</constant>,
тогда переменная <varname>$wddx_size</varname> не была бы создана.
Флаг <constant>EXTR_OVERWRITE</constant> привёл бы к тому,
что переменной <varname>$size</varname> было бы присвоено
значение «medium», а флаг <constant>EXTR_PREFIX_ALL</constant>
был бы причиной того, что были бы созданы
переменные <varname>$wddx_color</varname>,
<varname>$wddx_size</varname> и <varname>$wddx_shape</varname>.
</para>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
Не стоит вызывать функцию <function>extract</function>
с ненадёжными данными наподобие пользовательского ввода
(например, с суперглобальными переменными <varname>$_GET</varname>, <varname>$_FILES</varname>).
Когда это всё-таки делают, проверяют, что значение параметра <parameter>flags</parameter>
задано неперезаписывающим флагом наподобие
<constant>EXTR_SKIP</constant>, и помнят,
что переменные нужно извлекать в том же порядке, который определён
в директиве <link linkend="ini.variables-order">variables_order</link>
файла <link linkend="ini">&php.ini;</link>.
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>compact</function></member>
<member><function>list</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->