PHP 8.5 Pipe Operator vs Laravel Collections

PHP 8.5 הציגה את אופרטור ה-pipe. רוב מפתחי Laravel התעלמו ממנו. אנחנו משתמשים ב-collect()->filter()->map() כבר שנים. זה עובד.

לאחר מכן, Spatie שחררה את Piper. זוהי ספרייה שמביאה helpers בסגנון Laravel לאופרטור ה-pipe. היא משתמשת בפונקציות עצמאיות עבור מערכים ומחרוזות.

האם Piper הוא תחליף ל-Collections? לא. הוא משרת מטרה שונה.

Where Piper wins

Native values. Collections עוטפות את הנתונים שלך באובייקט. עליך להמיר מערכים ל-collections וחזרה. Piper עובד עם מערכים ומחרוזות רגילים. הנתונים נכנסים כ-native ויוצאים כ-native.

Mixing functions. שרשרת Collection קוראת רק למתודות של מחלקת ה-Collection. שרשרת pipe מקבלת כל פונקציה. ניתן לשלב helpers של Piper, פונקציות PHP native ופונקציות מותאמות אישית משלך בזרם (flow) אחד.

Zero dependencies. Piper לא זקוק ל-framework של Laravel. זה הופך אותו למושלם עבור כותבי חבילות (packages) שרוצים קוד נקי ללא תלויות כבדות.

Where Collections win

Feature depth. ל-Collections יש מעל 100 מתודות כמו groupBy() ו-pluck(). ל-Piper יש רק את הנפוצות ביותר.

Lazy evaluation. LazyCollections מטפלות בסטים עצומים של נתונים עם צריכת זיכרון נמוכה. Piper יוצר מערך חדש בכל שלב. זה עלול להאט את האפליקציה שלך עם נתונים גדולים.

Ecosystem fit. Eloquent מחזיר Collections. Query builders מחזירים Collections. המאבק מול ה-framework כדי להשתמש ב-Piper יוצר לעיתים קרובות יותר עבודה.

Discoverability. ה-IDE שלך מציג כל מתודה כשאתה מקליד מקף אחרי Collection. עם Piper, עליך לייבא כל פונקציה באופן ידני.

The Big Catch

עליך להריץ PHP 8.5. רוב שרתי ה-production עדיין מריצים 8.2 או 8.4. אם אינך בגרסה 8.5, Piper חסר תועלת עבורך כרגע.

Adoption Tips

השתמש ב-Piper אם אתה כותב packages או קוד שאינו תלוי ב-framework (framework-agnostic). השתמש בו כשאתה רוצה להפוך מערכים native ללא ה-overhead של אובייקטים.

היצמד ל-Collections בתוך אפליקציית ה-Laravel שלך. הן משולבות, חזקות, ומה שהצוות שלך מצפה לו.

Piper אינו תחליף. הוא כלי למילוי הפערים בין פרויקטים.

Source: https://dev.to/hafiz619/php-85s-pipe-operator-vs-laravel-collections-where-piper-fits-and-where-it-doesnt-1bkl