I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

شرح ميزات PHP 8.1: قوة الـ Enums في الكود النظيف وتجنب الأخطاء

شرح ميزات PHP 8.1: قوة الـ Enums في الكود النظيف وتجنب الأخطاء يا هلا بيك يا بشمهندس في عالم البرمجة! لو انت شغال بقالك فترة بلغة بي إتش بي (PHP)، أكيد مريت بال

شرح ميزات PHP 8.1: قوة الـ Enums في الكود النظيف وتجنب الأخطاء
Reading Count: 3

شرح ميزات PHP 8.1: قوة الـ Enums في الكود النظيف وتجنب الأخطاء

يا هلا بيك يا بشمهندس في عالم البرمجة! لو انت شغال بقالك فترة بلغة بي إتش بي (PHP)، أكيد مريت بالموقف المزعج ده: بتعمل نظام جديد، وليكن نظام إدارة مستخدمين، وعايز تحدد حالات الحساب زي "نشط"، "موقوف"، أو "في انتظار التفعيل". زمان، كنا بنلجأ للـ (Constants) العشوائية أو نكتبهم كـ (Strings) عادية جوه قاعدة البيانات والكود. النتيجة؟ typos في كل حتة، كود مش نضيف، ومقالب بتفرقع في الـ (Production) بسبب حرف كابيتال بالغلط!

لكن، من ساعة ما نزلت ميزات PHP 8.1، والدنيا اتغيرت تماماً. ظهرت حاجة اسمها (Enumerations) أو الـ Enums بالاختصار، ودي نقلت كتابة الكود لمستوى تاني خالص من الأمان والنظافة. في المقال ده، هنتكلم بالتفصيل إزاي الـ Enums هتنقذ مشروعك، وهنغوص في تفاصيلها كأننا قاعدين على القهوة بنشرب شاي وبنراجع كود مع بعض.

إيه هي الـ Enums أصلاً؟ وليه بنحتاجها في Web Development؟

الـ (Enumerations) بالعربي يعني "التعدادات". باختصار شديد، هي طريقة بتخليك تحصر القيم المتاحة لمتغير معين في مجموعة ثابتة ومعروفة مسبقاً. زمان، عشان نعمل حاجة شبه كده، كنا بنستخدم الـ (Class Constants) بالشكل ده:


class UserStatus {
    const ACTIVE = 'active';
    const INACTIVE = 'inactive';
    const PENDING = 'pending';
}

المشكلة هنا إيه؟ إن PHP مش بتمنعك تبعت أي (String) عشوائية للـ Function بتاعتك. يعني ممكن تلاقي مبرمج زميلك كاتب 'Activ' بالغلط، والبرنامج يكمل عادي ومحدش حاسب لحد ما يحصل Bug غريب. هنا بتيجي قوة الـ Enums في الـ (Coding Challenges) وتطوير الـ (Web Development)، لأنها بتفرض نوع بيانات صارم (Strict Typing).

الـ Pure Enums (الـ Enums النقية) في PHP 8.1

في PHP 8.1، تقدر تعرف Enum بطريقة سهلة جداً باستخدام الكلمة المحفورة enum. تعال نشوف مثال عملي:


enum UserStatus {
    case Active;
    case Inactive;
    case Pending;
}

بص الجمال! انت هنا عملت نوع بيانات جديد اسمه UserStatus. لما تيجي تستخدمه في الـ Functions بتاعتك، هتقفل الباب قصاد أي قيم عشوائية:


function updateUserStatus(UserStatus $status) {
    // الكود هنا مضمون 100% إن الـ status دي واحدة من التلاتة المسموح بيه
}

// الاستخدام الصحيح:
updateUserStatus(UserStatus::Active);

// الاستخدام الخاطئ (هيدي Fatal Error):
updateUserStatus('active');

النوع ده بنسميه (Pure Enums)، وهو ممتاز جداً لو انت محتاج القيم كـ (Objects) وممش محتاج تقارنها بقيم مخزنة في قاعدة البيانات بشكل مباشر.

الـ Backed Enums (الـ Enums المدعومة بقيم)

في الواقع العملي، غالباً أحنا بنحتاج نخزن الحالات دي في الداتابيز كـ (Integers) أو (Strings). عشان كده PHP 8.1 وفرت لنا الـ (Backed Enums)، ودي عبارة عن Enums ليها قيم أساسية مدعومة:


enum UserStatus: string {
    case Active = 'active';
    case Inactive = 'inactive';
    case Pending = 'pending';
}

المميز هنا إنك تقدر تحول الـ Enum لقيمتها والعكس بكل سهولة باستخدام الـ Methods الجاهزة زي value و from:


// تجيب القيمة المخزنة
$statusValue = UserStatus::Active->value; // هيطلع 'active'

// ترجع الـ Enum من القيمة الجاية من الداتابيز
$status = UserStatus::from('active'); 

ولو خايف إن القيمة الجاية من الداتابيز تكون غلط وتضرب استثناء (Exception)، تقدر تستخدم tryFrom بدل from، وهي tryFrom هترجع null لو القيمة مش موجودة، وده بيخلي الـ (Error Handling) أسهل بكتير.

إضافة الـ Methods للـ Enums وكتابة Clean Code

الجميل في PHP 8.1 إن ال مش مجرد شوية قيم ثابتة وبس، دي تقدر تحتوي على (Methods) وكمان تستخدم الـ (Traits)! يعني لو عايز تعرض لون لكل حالة عشان الواجهة الأمامية (Front-end)، تقدر تعمل كده:


enum UserStatus: string {
    case Active = 'active';
    case Inactive = 'inactive';
    case Pending = 'pending';

    public function badgeColor(): string {
        return match($this) {
            self::Active => 'green',
            self::Inactive => 'red',
            self::Pending => 'yellow',
        };
    }
}

// الاستخدام:
echo UserStatus::Active->badgeColor(); // هيطلع 'green'

الأسلوب ده بيخلي الـ Business Logic بتاعك متجمع جوه الـ Enum نفسه، وبتودع الـ (If-Else) العشوائية والطويلة اللي كانت بتبوظ شكل الكود وتخليه صعب الصيانة.

خاتمة ونصيحة من أخ

يا صديقي، الميزات الجديدة في اللغات زي PHP 8.1 مش نازلة عشان الديكور، دي نازلة عشان تسهل حياتك كمبرمج وتخلي الكود بتاعك أرتب وأقوى وأقل عرضة للأخطاء (Bugs). استخدام الـ Enums هيخليك تبطل تعتمد على الحظ في كتابة الـ Strings والـ Constants العشوائية، وهيرفع من كفاءتك المهنية.

نصيحتي ليك: متكتفيش بالقراءة، افتح مشروع تجريبي عندك على الجهاز، واكتب كود باستخدام الـ Enums النهاردة قبل بكره. ايدك لما تاخد على الكود النظيف، هتحس بالفرق بنفسك. بالتوفيق يا بشمهندس، واستنا في مقالات تقنية أكتر!


Share

Related posts

Aug 20, 2026 • 1 min read
Reading Count: 9
استخدام الـ Macros في Laravel لإضافة دوال جديدة للكلاسات

ازاي تضيف دوال جديدة لكلاسات لارافيل الأساسية من غير ما تكسر الكود؟ استخدام الـ Macros في لارافيل (L...

Aug 20, 2026 • 1 min read
Reading Count: 4
الـ API Resources في Laravel: تنسيق البيانات زي المحترفين

يا هلا بيك يا صديقي المبرمج في عالم تطوير الويب وتصميم الواجهات البرمجية (Web Development). تعال نتك...

Aug 19, 2026 • 1 min read
Reading Count: 7
أفضل استراتيجيات الـ Caching في Laravel لتسريع التطبيق

يا هلا بيك يا باشمهندس في عالم البرمجة! أكيد في يوم من الأيام وأنت شغال على مشروع لارافيل (Laravel)،...