تعزيز PHP Enums باستخدام archtechx/enums

يوليو 1, 2025

تعزيز PHP enums باستخدام حزمة archtechx/enums

من PHP 8.1، ظهر نوع جديد اسمه “enums” بيخليك تعرف قيم ثابتة بأسماء مرمّزة زي statuses أو roles. الحزمة دي بتضيف Traits بتقلل الكود المتكرر وتحسّن تجربة الكتابة.

✨ أهم المميزات

  • InvokableCases: تقدر تنادي الحالة مباشرة بدون ->value.
  • Names: تجيب أسماء الحالات في مصفوفة.
  • Values: تجيب القيم (لو backed) أو الأسماء (لو pure).
  • Options: تجيب مصفوفة case => value.
  • From: بتضيف دوال زي from()، tryFromName() وغيرها.
  • Metadata: تضيف وصف أو لون لكل حالة.
  • Comparable: تقارن الحالات بسهولة بـ is()، in() وهكذا.

📦 طريقة التثبيت

مطلوب PHP 8.1+. استخدم Composer:

composer require archtechx/enums

🧩 أمثلة عملية

1. InvokableCases

use ArchTech\Enums\InvokableCases;

enum TaskStatus: int {
  use InvokableCases;
  case INCOMPLETE = 0;
  case COMPLETED = 1;
}

TaskStatus::COMPLETED(); // النتيجة: 1

2. Names & Values

use ArchTech\Enums\Names;
use ArchTech\Enums\Values;

enum Role {
  use Names, Values;
  case ADMIN, USER, GUEST;
}

Role::names(); // ['ADMIN', 'USER', 'GUEST']
Role::values(); // ['ADMIN', 'USER', 'GUEST']

3. Options & stringOptions()

use ArchTech\Enums\Options;

enum TaskStatus: int {
  use Options;
  case INCOMPLETE = 0;
  case COMPLETED = 1;
}
TaskStatus::options(); 
// ['INCOMPLETE' => 0, 'COMPLETED' => 1]

TaskStatus::stringOptions();
// يرجّع كود HTML جاهز لاستخدامه في

4. From و tryFrom

use ArchTech\Enums\From;

enum Role: string {
  use From;
  case ADMIN = 'admin';
  case USER = 'user';
}

Role::from('admin');      // => Role::ADMIN
Role::tryFrom('unknown'); // => null
Role::fromName('USER');   // => Role::USER

5. Metadata

use ArchTech\Enums\Metadata;
use ArchTech\Enums\Meta\Meta;
use App\Enums\Meta\{Description, Color};

#[Meta(Description::class, Color::class)]
enum TaskStatus: int {
  use Metadata;
  #[Description('Incomplete')] #[Color('red')]
  case INCOMPLETE = 0;
}
TaskStatus::INCOMPLETE->description(); // => 'Incomplete'

6. Comparable

use ArchTech\Enums\Comparable;

enum TaskStatus: int {
  use Comparable;
  case INCOMPLETE = 0;
  case COMPLETED = 1;
}

TaskStatus::INCOMPLETE->is(TaskStatus::INCOMPLETE); // => true

✅ نصائح عملية

  • استخدم InvokableCases بدل ->value علشان الكود يبقى أنضف.
  • استخدم options() يسهّل إنشاء dropdowns.
  • استخدم tryFrom() علشان تتعامل بأمان مع مدخلات المستخدم.
  • نظم Enums في فولدر app/Enums
    لو شغال على Laravel.

الحزمة دي بتخلي الـ Enums في PHP أقوى وأسهل في الاستخدام، خصوصًا في Laravel، APIs، والفورمز.

المدونة

أحدث مميزات ECMAScript 2025

يونيو 30, 2025

أحدث مميزات ECMAScript 2025 في 25 يونيو 2025، تم اعتماد ES2025 رسميًا. الإضافات الجاية هتسهل عليك كتابة الكود: 1. 📦 Import Attributes و JSON Module...

أهم تحديثات Laravel و PHP لكتابة كود أنظف وأسرع

أغسطس 17, 2025

Laravel Global Scopes: Automatic Query Filtering Eloquent الأهمية: فرض فلترة ثابتة على جميع استعلامات الموديل (مثل Soft Deletes) دون تكرا...

Laravel 12.19: استخدام Attributes لتنظيم الـ Query Builder

يوليو 07, 2025

Laravel 12.19: استخدام Attributes تنظّم Query Builder في Laravel 12.19، دلوقتي تقدر تستخدم Attribute اسمه #[UseEloquentBuilder] علشان تحدد Query Bu...

Notifire + FCM مع Laravel

سبتمبر 13, 2025

لو محتاج تبعت إشعارات Push من تطبيق Laravel سواء للموبايل أو للويب، فالحل الأسرع والأبسط هو إنك تستخدم Notifire اللي بيربط Laravel مباشرةً مع Fireba...

Laravel 12.21.0 – تحديث ذكي لتسهيل الاستعلامات والتحقق الصارم للبيانات

أغسطس 03, 2025

أصدرت Laravel النسخة 12.21.0 بمزايا برمجية هامة تساهم في كتابة كود أنظف وأسهل في الصيانة. من أهمها دالة whereValueBetween() الجديدة، بالإضافة إلى...

نظام طوابير Laravel واستخدام Supervisor في الإنتاج

يوليو 01, 2025

🚀 نظام Queue & Jobs في Laravel هناخدك خطوة خطوة من أول إنشاء الجداول لحد ما تشغّل الطوابير في Production عن طريق Supervisor. الخطوة 1: إنشاء...

The Ultimate Managed Hosting Platform