Чем хорош оператор распространения в PHP?

Я использую операторы распространения в JavaScript, но для чего они используются в PHP? Во всех случаях, которые я пробовал, он действует как обычный массив. Есть ли какое-то хорошее применение для этого, которого я не нашел?

(Я знаю, как это работает, просто спрашиваю полезный пример, где он более полезен, чем массив)

1 ответ

Решение

Оператор спреда (...) преобразует массив (или, как правило, Traversable) в список аргументов и наоборот. Если вы ищете что-то более причудливое, чем это, вам не повезло: реализация Javascript просто более мощная, так как она также преобразует объектные выражения в пары ключ-значение и наоборот.

Как вы могли бы использовать это? Ну, обратитесь к оригинальному RFC, который определил его для некоторых практических примеров:

  • Более производительный, чем call_user_func_array
  • Расширение вариационных функций: переадресация
  • Частичное применение: несколько распаковок

Я лично использую это из-за этого первого пункта. Как уже упоминалось в RFC:

Синтаксис распаковки аргумента... примерно в 3,5-4 раза быстрее, чем call_user_func_args. Это решает проблему производительности. Код и результаты.

Вы также можете спросить, почему PHP не реализовал распаковку объектов, как, например, Javascript. На это тоже есть ответ в RFC:

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

Я лично нахожу это ловушкой, поэтому я воздержался от голосования по этому RFC.

Другие вопросы по тегам