1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
2025-08-30 14:58:47 +03:00

313 lines
9.5 KiB
XML
Raw Permalink 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: eaec4ab10a65c4515ee2fb899d06e89bae3754b0 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.list" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>list</refname>
<refpurpose>Присваивает переменным значения как массиву</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>list</methodname>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
<methodparam rep="repeat" choice="opt"><type>mixed</type><parameter>vars</parameter></methodparam>
</methodsynopsis>
<para>
Как и конструкция <function>array</function>, это не функция,
а языковая конструкция. Конструкция <function>list</function>
присваивает списку переменных значения за одну операцию.
Распаковку поддерживают только массивы и объекты, классы которых реализуют интерфейс <link linkend="class.arrayaccess">ArrayAccess</link>.
Нельзя указывать пустую конструкцию <function>list</function> в выражениях присваивания.
</para>
<note>
<para>
До PHP 7.1.0 конструкция <function>list</function> работала только
с индексными массивами и принимала числовые индексы начиная с 0.
</para>
</note>
<para>
Начиная с PHP 7.1.0 для деструктуризации массивов с нецелочисленными или непоследовательными ключами
в конструкции <function>list</function> разрешили указывать явные ключи.
Подробнее об этом рассказывает блок
«<link linkend="language.types.array.syntax.destructuring">Деструктуризация массива</link>».
</para>
<note>
<para>
Попытка получить доступ к неопределённому ключу массива
аналогична обращению к любой другой неопределённой переменной:
выдаётся сообщение об ошибке уровня <constant>E_WARNING</constant>,
или ошибки уровня <constant>E_NOTICE</constant> до PHP 8.0.0,
а результатом становится значение &null;.
</para>
<para>
Попытка распаковать скалярное значение присваивает значение &null; каждой переменной в левой части выражения присваивания.
При попытке распаковать объект, класс которого не реализует интерфейс ArrayAccess, возникает фатальная ошибка.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>var</parameter></term>
<listitem>
<para>
Переменная.
</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<varlistentry>
<term><parameter>vars</parameter></term>
<listitem>
<para>
Остальные переменные.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает массив переменных, которым присвоила значения.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.3.0</entry>
<entry>
Добавили поддержку присваивания по ссылкам при деструктуризации массива.
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
Конструкция <function>list</function> теперь поддерживает ключи.
Это помогает разыменовывать ассоциативные массивы и массивы с индексами не по порядку.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Примеры присваивания переменным значений конструкцией <function>list</function></title>
<programlisting role="php">
<![CDATA[
<?php
$info = array('кофе', 'коричневый', 'кофеин');
// Перечисляем переменные
list ($drink, $color, $power) = $info;
echo "$drink - $color, а $power делает его особенным.\n";
// Перечисляем только часть переменных
list ($drink,, $power) = $info;
echo "В $drink есть $power.\n";
// Пропускаем все переменные, кроме третьей
list (,, $power) = $info;
echo "Мне нужен $power!\n";
// Конструкция list() не работает со строками
list ($bar) = "abcde";
var_dump($bar); // NULL
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример присваивания значений переменным конструкцией <function>list</function></title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
$result = $pdo->query("SELECT id, name FROM employees");
while (list ($id, $name) = $result->fetch(PDO::FETCH_NUM)) {
echo "id: $id, name: $name\n";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример работы вложенной конструкции <function>list</function></title>
<programlisting role="php">
<![CDATA[
<?php
list ($a, list ($b, $c)) = array(1, array(2, 3));
var_dump($a, $b, $c);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
int(1)
int(2)
int(3)
]]>
</screen>
</example>
</para>
<para>
Порядок определения индексов в массиве,
который обработает языковая конструкция <function>list</function>,
неважен.
</para>
<para>
<example>
<title>
Пример поведения конструкции <function>list</function>
с определениями порядка индексов
</title>
<programlisting role="php">
<![CDATA[
<?php
$foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');
$foo[1] = 'd';
list ($x, $y, $z) = $foo;
var_dump($foo, $x, $y, $z);
?>
]]>
</programlisting>
<para>
Следующий параграф показывает вывод, который сформирует пример.
Обратите внимание на порядок элементов сравнения в массиве
и порядок, в котором элементы записали в синтаксисе конструкции <function>list</function>:
</para>
<screen>
<![CDATA[
array(4) {
[2]=>
string(1) "a"
["foo"]=>
string(1) "b"
[0]=>
string(1) "c"
[1]=>
string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"
]]>
</screen>
</example>
</para>
<para>
<example>
<title>
Пример присваивания значений переменным
конструкцией <function>list</function> с указанием ключей
</title>
<simpara>
Начиная с PHP 7.1.0 конструкции <function>list</function> разрешили
содержать явные ключи, которые указывают как произвольные выражения.
Конструкция принимает смесь строковых и целочисленных ключей; но нельзя смешивать
элементы с ключами и без ключей.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
foreach ($data as ["id" => $id, "name" => $name]) {
echo "id: $id, name: $name\n";
}
echo PHP_EOL;
list (1 => $second, 3 => $fourth) = [1, 2, 3, 4];
echo "$second, $fourth\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
id: 1, name: Tom
id: 2, name: Fred
2, 4
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>each</function></member>
<member><function>array</function></member>
<member><function>extract</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
-->