Enums في PHP: كيفية استخدام التعدادات مع أمثلة كود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Enums في PHP: من الفوضى إلى النظام

\n\n

هل سبق لك أن كتبت كودًا يتم فيه تخزين حالة الطلب كسلسلة نصية 'new'، 'paid'، 'shipped'؟ ثم واجهت أخطاء بسبب خطأ إملائي مثل 'shippped'؟ أو قمت بتمرير getOrderByStatus('Active') إلى دالة بينما كانت تنتظر 'active'؟ مألوف؟ إذن هذه المقالة لك.

\n\n

لفترة طويلة، لم تكن التعدادات الأصلية (enums) موجودة في PHP. كان المطورون يبتكرون حلولاً: باستخدام ثوابت الفئات، المصفوفات، وحتى التعليقات الوهمية. لكن مع إصدار PHP 8.1، تغير كل شيء. الآن لدينا تعدادات PHP كاملة — أداة قوية تجعل الكود أنظف وأكثر أمانًا ووضوحًا.

\n\n

في هذا الدليل، سنشرح enums في PHP من الألف إلى الياء: من الصيغة الأساسية إلى التقنيات المتقدمة. ستتعلم كيفية إنشاء التعدادات، العمل بها، مقارنتها، واستخدامها في المشاريع الحقيقية. هيا بنا!

\n\n

ما هو Enum في PHP؟

\n\n

Enum (enumeration) هو نوع بيانات مقيد بمجموعة من القيم المحددة مسبقًا. ببساطة: تحدد قائمة بالخيارات الممكنة، ويمكن للمتغير أن يأخذ واحدًا منها فقط. لا سلاسل نصية عشوائية، ولا قيم غير مدققة.

\n\n

في PHP 8.1، يتم تنفيذ التعدادات كفئات خاصة. كل قيمة هي كائن، وليس مجرد ثابت. وهذا يوفر العديد من المزايا:

\n\n
    \n
  • الكتابة الصارمة (Strict typing) — لن يسمح المترجم بـ 'pending' بدلاً من Status::Pending
  • \n
  • الأمان — لا أخطاء إملائية عشوائية
  • \n
  • الوضوح — الكود يتحدث عن نفسه
  • \n
  • دعم بيئة التطوير (IDE) — الإكمال التلقائي يعمل بشكل ممتاز
  • \n
\n\n

صيغة Enum في PHP

\n\n

إنشاء تعداد في PHP سهل. استخدم الكلمة المفتاحية enum:

\n\n
<?php\n\nenum OrderStatus\n{\n    case New;\n    case Pending;\n    case Processing;\n    case Shipped;\n    case Delivered;\n    case Cancelled;\n}\n
\n\n

الآن يمكننا استخدام OrderStatus كنوع:

\n\n
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n    // معالجة الحالة\n}\n\n// تمرير القيمة:\nupdateOrderStatus(OrderStatus::Shipped);\n
\n\n

حاول تمرير سلسلة نصية 'shipped' — سيعطيك PHP خطأ في النوع. هذا هو سحر enum في PHP.

\n\n

Enum مع الدعم الخلفي (Backed Enums)

\n\n

غالبًا ما نحتاج إلى ربط كل حالة بقيمة محددة — مثل رقم أو سلسلة نصية لقاعدة البيانات. في PHP، يُسمى هذا backed enum:

\n\n
<?php\n\nenum OrderStatus: string\n{\n    case New = 'new';\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n}\n
\n\n

الآن كل حالة لها قيمة سلسلة نصية. يمكنك الحصول عليها عبر الخاصية value:

\n\n
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n
\n\n

ويمكنك إنشاء حالة من القيمة مرة أخرى:

\n\n
<?php\n\n$status = OrderStatus::from('shipped');\necho $status->name; // 'Shipped'\n
\n\n

الطريقة from() ستلقي استثناءً إذا لم يتم العثور على القيمة. إذا كنت تريد الحصول على null — استخدم tryFrom().

\n\n

الطرق في Enum: السلوك داخل التعدادات

\n\n

إحدى الميزات الرائعة لـ PHP enum هي إمكانية إضافة طرق مباشرة داخل التعداد. هذا يحول enum من مجرد قائمة ثوابت إلى كائن كامل بمنطق خاص به.

\n\n
<?php\n\nenum OrderStatus: string\n{\n    case New = 'new';\n    case Pending = 'pending';\n    case Processing = 'processing';\n    case Shipped = 'shipped';\n    case Delivered = 'delivered';\n    case Cancelled = 'cancelled';\n\n    public function label(): string                

المدونات

توصيات الكتب