Оператор 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 — это не замена. Это инструмент для заполнения пробелов между проектами.
