С точки зрения синтаксиса, оператор Spread в вызовах функций и в их определениях выглядят одинаково. При этом он выполняет обратное действие:
<?php
$arrayOfArrays = [
[1, 2],
[2, 3]
];
array_merge(...$arrayOfArrays);
# Array
# (
# [0] => 1
# [1] => 2
# [2] => 2
# [3] => 3
# )
Другими словами, здесь оператор Spread раскладывает массив на аргументы. Количество полученных аргументов равно количеству элементов массива. По сути, код выше преобразуется в вызов:
<?php
array_merge($arrayOfArrays[0], $arrayOfArrays[1]);
// array_merge([1, 2], [2, 3]);
Как и в случае с определением функций, оператор Spread можно использовать совместно с позиционными аргументами:
<?php
array_merge([3], ...$arrayOfArrays);
# Array
# (
# [0] => 3
# [1] => 1
# [2] => 2
# [3] => 2
# [4] => 3
# )
То же самое справедливо и для большего количества аргументов:
<?php
$array = [3, 2];
array_merge([3], $array, ...$arrayOfArrays);
# Array
# (
# [0] => 3
# [1] => 3
# [2] => 2
# [3] => 1
# [4] => 2
# [5] => 2
# [6] => 3
# )
Таким же образом, он должен всегда оказываться последним аргументом:
<?php
array_merge(...$arrayOfArrays, [3, 2]);
// Fatal error: Cannot use positional argument after argument unpacking
В PHP оператор Spread применяется редко, но иногда все таки бывает нужен — например, если аргументы записаны в массив.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.