Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Що таке повідомлення вищого порядку в колекціях?

Скорочення для частих замикань, які лише викликають метод чи беруть поле елемента.

// звичайно
$users->each(fn (User $user) => $user->markAsVip());
$total = $orders->sum(fn (Order $order) => $order->total);
$active = $users->filter(fn (User $user) => $user->isActive());

// повідомленнями вищого порядку
$users->each->markAsVip();
$total = $orders->sum->total;
$active = $users->filter->isActive();

Працює для each, map, filter, reject, sum, avg, max, min, sortBy, groupBy, keyBy, first, contains, every, partition, unique та інших.

Коли доречно: коротка операція над кожним елементом, і читається як речення.

Коли ні:

  • потрібні аргументи чи умова - звичайне замикання зрозуміліше;
  • статичний аналіз і IDE гірше розуміють ->each->method(), тож у кодовій базі з суворим PHPStan частина команд їх уникає.

Поряд - макроси: якщо одну й ту саму операцію пишуть у багатьох місцях, її оформлюють як Collection::macro('toCsv', ...) у провайдері чи як метод власної колекції моделі.

Докладніше в документації: Повідомлення вищого порядку

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання