تعزيز 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، والفورمز.

المدونة

استدعاء ملفات JavaScript عند الحاجة فقط لتحسين أداء موقعك

يوليو 24, 2025

🧠 يعني إيه Dynamic Import؟ الديناميـك إمبورت ببساطة هو إنك تحمّل ملف أو موديول JavaScript "وقت الحاجة بس" مش من أول الصفحة. الميزة دي بتقلل حجم ال...

تحديث Laravel 12.18.0

يونيو 17, 2025

تحديث Laravel 12.18.0 صدر نسخه Laravel 12.18.0 فيها شوية ميزات جامدة كده: توابع لتشفير وفك تشفير النصوص باستخدام Stringable ديركت في chain strings...

لارافيل 12.16.0 - مميزات جديدة للمطورين

يونيو 03, 2025

لارافيل 12.16.0 - مميزات جديدة للمطورين 1. قاعدات تحقق جديدة: in_array_keys دلوقتي تقدر تتحقق إن الأراي فيه على الأقل مفتاح واحد من اللي انت محددهم...

React Native 0.81: نقلة نوعية في كفاءة بيئة التطوير

يناير 27, 2026

مقدمة يُعد React Native من أكثر الأطر استخدامًا في تطوير تطبيقات الهواتف الذكية متعددة المنصات. ومع ذلك، ظل وقت بناء تطبيقات iOS أحد أكبر التحديا...

تجاوز $fillable بأمان باستخدام forceFill() في Laravel

يوليو 02, 2025

تجاوز $fillable بأمان باستخدام forceFill() في Laravel جربت تستخدم create() في Laravel ولاقيت إن حقول زي role أو status مش بتتحفظ؟ ده بسبب حماية Larav...

ألوان في CSS - شرح مبسّط

يونيو 26, 2025

ألوان في CSS - شرح مبسّط النهارده هنتكلم عن الألوان في CSS: ازاي بنحددها، وخصوصًا الطرق الحديثة زي lab() وoklch(). 1. يعني إيه لون؟ مفيش حاجة اسم...