PHP: Функции
Теория: Упаковка аргументов
Сигнатура функции array_merge в документации определяется так:
Она указывает, что в array_merge можно передать любое количество массивов:
С точки зрения вызова, в этом нет ничего необычного — просто разное число аргументов. А вот определение функции с переменным числом аргументов выглядит необычно, потому что здесь незнакомый для нас синтаксис:
Три точки представляют собой оператор Spread. Основная сложность в том, что оператор Spread выполняет разные действия в зависимости от того, где он применяется. В определении функции он выполняет упаковку параметров, а при вызове — распаковку. Об упаковке мы поговорим в этом уроке, а о распаковке — в следующем.
Итак, оператор Spread в определении функции собирает все переданные аргументы в массив. Если в функцию не передается ни одного аргумента, то массив будет пустым:
Обратите внимание, что этому оператору не важен тип аргументов. Они все станут элементами массива, даже если мы передаем на вход функции массивы:
Теперь взглянем на сигнатуру функции min(), которая ищет наименьшее значение:
Видно, что функция min() ждет на вход как минимум одно значение, опциональны только следующие. Такого поведения можно добиться следующим кодом:
То же самое можно сделать и для двух аргументов:
Эту идею можно продолжать и дальше, делая обязательными нужное количество аргументов. Единственное ограничение — оператор Spread можно использовать только для последнего аргумента. Другими словами, такой код синтаксически неверен:
Такой код тоже не верен с точки зрения синтаксиса:
.png)
