Оператор 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 — це не заміна. Це інструмент для заповнення прогалин між проєктами.
