Оператор pipe у PHP 8.5 проти Laravel Collections

PHP 8.5 представив оператор pipe. Більшість Laravel-розробників його проігнорували. Ми роками використовували collect()->filter()->map(). Це працює.

Потім Spatie випустила Piper. Це бібліотека, яка приносить хелпери у стилі Laravel до оператора pipe. Вона використовує окремі функції для масивів та рядків.

Чи є Piper заміною Collections? Ні. Він служить іншим цілям.

Переваги Piper

Нативні значення. Collections загортають ваші дані в об'єкт. Вам доводиться конвертувати масиви в collections і назад. Piper працює з простими масивами та рядками. Дані входять як нативні типи і виходять як нативні.

Змішування функцій. Ланцюжок Collection викликає лише методи класу Collection. Ланцюжок pipe приймає будь-яку функцію. Ви можете змішувати хелпери Piper, нативні функції PHP та власні кастомні функції в одному потоці.

Нуль залежностей. Piper не потребує фреймворку Laravel. Це робить його ідеальним для авторів пакетів, які хочуть чистий код без важких залежностей.

Переваги Collections

Глибина функціоналу. Collections мають понад 100 методів, таких як groupBy() та pluck(). Piper має лише найпоширеніші з них.

Ліниве обчислення (Lazy evaluation). LazyCollections обробляють величезні набори даних з низьким споживанням пам'яті. Piper створює новий масив на кожному кроці. Це може сповільнити ваш додаток при роботі з великими даними.

Відповідність екосистемі. Eloquent повертає Collections. Query builders повертають Collections. Спроби «боротися» з фреймворком, щоб використати Piper, часто створюють більше роботи.

Зручність виявлення (Discoverability). Ваша IDE показує кожен метод, коли ви вводите дефіс після Collection. З Piper вам доводиться вручну імпортувати кожну функцію.

Головний підвох

Вам потрібно використовувати PHP 8.5. Більшість продакшн-серверів все ще працюють на 8.2 або 8.4. Якщо ви не на 8.5, Piper зараз для вас марний.

Поради щодо впровадження

Використовуйте Piper, якщо ви пишете пакети або фреймворк-агностичний код. Використовуйте його, коли хочете трансформувати нативні масиви без зайвих витрат на об'єкти.

Притримуйтесь Collections всередині вашого Laravel-додатка. Вони інтегровані, потужні та є саме тим, чого очікує ваша команда.

Piper — це не заміна. Це інструмент для заповнення прогалин між проєктами.

Джерело: https://dev.to/hafiz619/php-85s-pipe-operator-vs-laravel-collections-where-piper-fits-and-where-it-doesnt-1bkl