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 אינו תחליף. הוא כלי למילוי הפערים בין פרויקטים.
