Скорочення для частих замикань, які лише викликають метод чи беруть поле елемента.
// звичайно
$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', ...) у провайдері чи як метод власної колекції моделі.