PHP: Функции
2026-02-26 20:07 Diff

Сигнатура функции array_merge в документации определяется так:

Она указывает, что в array_merge можно передать любое количество массивов:

С точки зрения вызова, в этом нет ничего необычного — просто разное число аргументов. А вот определение функции с переменным числом аргументов выглядит необычно, потому что здесь незнакомый для нас синтаксис:

Три точки представляют собой оператор Spread. Основная сложность в том, что оператор Spread выполняет разные действия в зависимости от того, где он применяется. В определении функции он выполняет упаковку параметров, а при вызове — распаковку. Об упаковке мы поговорим в этом уроке, а о распаковке — в следующем.

Итак, оператор Spread в определении функции собирает все переданные аргументы в массив. Если в функцию не передается ни одного аргумента, то массив будет пустым:

Обратите внимание, что этому оператору не важен тип аргументов. Они все станут элементами массива, даже если мы передаем на вход функции массивы:

Теперь взглянем на сигнатуру функции min(), которая ищет наименьшее значение:

Видно, что функция min() ждет на вход как минимум одно значение, опциональны только следующие. Такого поведения можно добиться следующим кодом:

То же самое можно сделать и для двух аргументов:

Эту идею можно продолжать и дальше, делая обязательными нужное количество аргументов. Единственное ограничение — оператор Spread можно использовать только для последнего аргумента. Другими словами, такой код синтаксически неверен:

Такой код тоже не верен с точки зрения синтаксиса: