Оператор Pipe в PHP 8.5 против Laravel Collections

В PHP 8.5 появился оператор pipe. Большинство Laravel-разработчиков проигнорировали его. Мы годами использовали collect()->filter()->map(). Это работает.

Затем Spatie выпустила Piper. Это библиотека, которая переносит хелперы в стиле Laravel в оператор pipe. Она использует отдельные функции для массивов и строк.

Является ли Piper заменой Collections? Нет. У него другая цель.

Преимущества Piper

Нативные значения. Collections оборачивают ваши данные в объект. Вам приходится преобразовывать массивы в коллекции и обратно. Piper работает с обычными массивами и строками. Данные на входе — нативные, и на выходе они тоже нативные.

Смешивание функций. Цепочка Collection вызывает только методы класса Collection. Цепочка pipe принимает любую функцию. Вы можете смешивать хелперы Piper, нативные функции PHP и свои собственные функции в одном потоке.

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

Преимущества Collections

Глубина функционала. В Collections более 100 методов, таких как groupBy() и pluck(). У Piper есть только самые распространенные.

Ленивые вычисления. LazyCollections обрабатывают огромные наборы данных с низким потреблением памяти. Piper создает новый массив на каждом шаге. Это может замедлить ваше приложение при работе с большими объемами данных.

Соответствие экосистеме. Eloquent возвращает Collections. Query builders возвращают Collections. Попытки обойти фреймворк ради использования Piper часто создают больше лишней работы.

Удобство поиска (Discoverability). Ваша IDE показывает каждый метод, когда вы вводите -> после Collection. С Piper вам придется вручную импортировать каждую функцию.

Главная загвоздка

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

Советы по внедрению

Используйте Piper, если пишете пакеты или framework-agnostic код. Используйте его, когда хотите трансформировать нативные массивы без накладных расходов на объекты.

Придерживайтесь Collections внутри вашего Laravel-приложения. Они интегрированы, мощны и именно то, чего ожидает ваша команда.

Piper — это не замена. Это инструмент для заполнения пробелов между проектами.

Источник: https://dev.to/hafiz619/php-85s-pipe-operator-vs-laravel-collections-where-piper-fits-and-where-it-doesnt-1bkl