تكرار السؤال: …
الإجابة المختصرة
الـ Pure Enums هي حالات مجردة بلا قيم، بينما الـ Backed Enums ترتبط بقيمة نصية أو رقمية وتدعم دوال من نوع tryFrom() وميثودز داخلية.
الشرح
حلت الـ Enums محل الثوابت الكلاسيكية (Class Constants) التي كانت تفتقر لأمان الأنواع. الـ Backed Enums تحدد نوعاً: enum Status: string وتدعم التحويل الآمن من نصوص قواعد البيانات عبر Status::from($val) أو Status::tryFrom($val). كما يمكن للـ Enums تطبيق الواجهات واحتواء دوال مخصصة.
مثال بالكود
enum OrderStatus: string {
case Pending = 'pending';
case Paid = 'paid';
case Shipped = 'shipped';
public function label(): string {
return match($this) {
self::Pending => 'قيد الانتظار',
self::Paid => 'تم الدفع',
self::Shipped => 'تم الشحن',
};
}
}أخطاء شائعة
- محاولة إسناد قيم من أنواع مختلطة (مثل خلط int و string) في نفس الـ Backed Enum.