0Pricing
PHP Academy · درس

التعدادات (Enums)

عرّفوا مجموعات آمنة النوع من القيم باستخدام التعدادات المدعومة والخالصة في PHP 8.1

التعدادات (Enums) درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

ما هي التعدادات؟

قدّمت PHP 8.1 التعدادات، وهي نوع خاص يقيّد المتغير بمجموعة محددة مسبقًا من القيم المسماة، ما يجعل التعليمات البرمجية أكثر وضوحًا وأمانًا من ناحية الأنواع.

التعداد النقي (Unit Enum)

يحتوي التعداد النقي على حالات مسماة من دون قيمة مرتبطة بها. وهو مناسب للحالة أو الاتجاه أو الوضع.

<?php
enum Status {
    case Active;
    case Inactive;
    case Banned;
}

$s = Status::Active;
echo $s->name; // "Active"

التعداد المرتبط بقيمة

يعيّن التعداد المرتبط بقيمة قيمةً بدائية، صحيحة أو نصية، لكل حالة، ما يجعله مفيدًا لتخزين البيانات في قواعد البيانات أو لاستجابات API.

<?php
enum Color: string {
    case Red   = "red";
    case Green = "green";
    case Blue  = "blue";
}

echo Color::Red->value; // "red"

From وTryFrom

حوّل قيمة خام إلى حالة تعداد باستخدام from()، الذي يطلق استثناءً عند عدم صلاحية القيمة، أو tryFrom()، الذي يعيد null عند عدم صلاحيتها.

<?php
$color = Color::from("red");      // Color::Red
$maybe = Color::tryFrom("purple"); // null

التعدادات في تلميحات الأنواع

استخدم التعدادات كتلميحات للأنواع في المعلمات والقيم المُعادة، إذ تفرض PHP تمرير الحالات الصالحة فقط.

<?php
function paint(Color $color): void {
    echo "Painting with ".$color->value;
}
paint(Color::Blue); // "Painting with blue"

حالات التعداد في match

تعمل التعدادات بانسجام كبير مع تعبيرات match لمعالجة جميع الحالات.

<?php
$label = match($status) {
    Status::Active   => "Active user",
    Status::Inactive => "Inactive account",
    Status::Banned   => "Banned",
};
// PHP can warn if cases are unhandled

التعداد ينفّذ واجهة

يمكن للتعدادات تنفيذ الواجهات، ما يتيح سلوكًا متعدد الأشكال.

<?php
interface HasLabel {
    public function label(): string;
}

enum Status: string implements HasLabel {
    case Active   = "active";
    case Inactive = "inactive";
    public function label(): string {
        return ucfirst($this->value);
    }
}

أساليب التعدادات

يمكن أن تحتوي التعدادات على أساليب، لكن لا يمكن أن تحتوي على مُنشئ أو خصائص قابلة للتغيير.

<?php
enum Suit: string {
    case Hearts   = "H";
    case Diamonds = "D";
    case Clubs    = "C";
    case Spades   = "S";

    public function color(): string {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => "red",
            Suit::Clubs,  Suit::Spades  => "black",
        };
    }
}

ثوابت التعدادات

يمكن أن تحتوي التعدادات على ثوابت، وليس حالات، للقيم البدائية ذات الصلة.

<?php
enum Direction {
    case North;
    case South;
    const DEFAULT = self::North;
}

سرد الحالات

تعيد EnumName::cases() مصفوفة تحتوي على جميع كائنات حالات التعداد، وهو أمر مفيد لإنشاء خيارات القوائم المنسدلة.

<?php
$options = Color::cases();
foreach ($options as $c) {
    echo $c->name.": ".$c->value."\n";
}

التعدادات مقابل ثوابت الفئات

تفرض التعدادات أمان الأنواع، فلا يمكنك تمرير العدد الصحيح 1 بالخطأ عندما تكون فئة Status متوقعة. أما ثوابت الفئات فلا توفّر هذا الضمان.

الملخص

تعبّر التعدادات عن مجموعات ثابتة من القيم مع توفير أمان الأنواع. استخدم التعدادات النقية للحالات، والتعدادات المرتبطة بقيمة عندما تحتاج إلى قيم لقاعدة البيانات أو API. استخدم tryFrom() للتحليل الآمن.

تحقّق سريع

ماذا يعيد Color::tryFrom("invalid") إذا لم تطابق القيمة أي حالة؟

الأسئلة الشائعة

هل درس «التعدادات (Enums)» مجاني؟

نعم — نص درس «التعدادات (Enums)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «التعدادات (Enums)»؟

عرّفوا مجموعات آمنة النوع من القيم باستخدام التعدادات المدعومة والخالصة في PHP 8.1 تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التعدادات (Enums)»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعبير Match والمعاملات المسمّاة
  2. المعامل Nullsafe وأنواع الاتحاد
  3. التعدادات (Enums)
  4. Fibers: التزامن التعاوني
← العودة إلى PHP Academy