PHP 8.5 Pipe Operator vs Laravel Collections

قدمت PHP 8.5 عامل الأنبوب (pipe operator). وقد تجاهله معظم مطوري Laravel. لقد استخدمنا collect()->filter()->map() لسنوات، وهي تعمل بشكل جيد.

ثم أصدرت Spatie مكتبة Piper. وهي مكتبة تجلب المساعدات (helpers) بأسلوب Laravel إلى عامل الأنبوب. وتستخدم دوالاً مستقلة للمصفوفات والنصوص.

هل Piper بديل لـ Collections؟ لا، فهي تخدم غرضاً مختلفاً.

أين يتفوق Piper

• القيم الأصلية (Native values). تقوم Collections بتغليف بياناتك داخل كائن (object). يجب عليك تحويل المصفوفات إلى collections ثم العودة مرة أخرى. أما Piper فيعمل مع المصفوفات والنصوص العادية. تدخل البيانات كقيم أصلية وتخرج كقيم أصلية.

• خلط الدوال. سلسلة الـ Collection تستدعي فقط الدوال (methods) الموجودة في فئة Collection. أما سلسلة الأنبوب (pipe chain) فتقبل أي دالة. يمكنك خلط مساعدات Piper، ودوال PHP الأصلية، ودوالك المخصصة في تدفق واحد.

• صفر تبعيات. لا تحتاج Piper إلى إطار عمل Laravel. وهذا يجعلها مثالية لمؤلفي الحزم (packages) الذين يرغبون في كود نظيف دون تبعيات ثقيلة.

أين تتفوق Collections

• عمق الميزات. تحتوي Collections على أكثر من 100 دالة مثل groupBy() و pluck(). بينما تحتوي Piper فقط على الدوال الأكثر شيوعاً.

• التقييم الكسول (Lazy evaluation). تتعامل LazyCollections مع مجموعات البيانات الضخمة باستهلاك منخفض للذاكرة. أما Piper فتقوم بإنشاء مصفوفة جديدة في كل خطوة، مما قد يؤدي إلى إبطاء تطبيقك عند التعامل مع بيانات كبيرة.

• التوافق مع النظام البيئي. تعيد Eloquent كائنات Collections. كما تعيد الـ Query builders كائنات Collections. إن محاولة "محاربة" إطار العمل لاستخدام Piper غالباً ما تزيد من حجم العمل.

• سهولة الاكتشاف. يظهر لك الـ IDE كل دالة عند كتابة شرطة (-) بعد الـ Collection. أما مع Piper، فيجب عليك استيراد كل دالة يدوياً.

العقبة الكبرى

يجب أن تستخدم PHP 8.5. لا تزال معظم خوادم الإنتاج تعمل بإصدارات 8.2 أو 8.4. إذا لم تكن تستخدم 8.5، فإن Piper لا فائدة منها لك في الوقت الحالي.

نصائح للاستخدام

استخدم Piper إذا كنت تكتب حزماً (packages) أو كوداً مستقلاً عن إطار العمل (framework-agnostic). استخدمها عندما تريد تحويل المصفوفات الأصلية دون العبء الإضافي للكائنات (objects).

التزم باستخدام Collections داخل تطبيق Laravel الخاص بك. فهي متكاملة، وقوية، وهي ما يتوقعه فريقك.

Piper ليست بديلاً، بل هي أداة لسد الفجوات بين المشاريع.

المصدر: https://dev.to/hafiz619/php-85s-pipe-operator-vs-laravel-collections-where-piper-fits-and-where-it-doesnt-1bkl