تعزيز 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، والفورمز.
المدونة
يوليو 06, 2025
إزاي تستخدم Web Components ببساطة وذكاء كتير من المطورين بيفكروا إن Web Components معمولة عشان تبقى بديل كامل لفريموركات زي React أو Vue. بس الحقيق...
يوليو 02, 2025
تجاوز $fillable بأمان باستخدام forceFill() في Laravel جربت تستخدم create() في Laravel ولاقيت إن حقول زي role أو status مش بتتحفظ؟ ده بسبب حماية Larav...
يونيو 26, 2025
ألوان في CSS - شرح مبسّط النهارده هنتكلم عن الألوان في CSS: ازاي بنحددها، وخصوصًا الطرق الحديثة زي lab() وoklch(). 1. يعني إيه لون؟ مفيش حاجة اسم...
يوليو 06, 2025
📘 شرح تفصيلي لتحديثات ECMAScript 2025 جميع مميزات ECMAScript 2025، مع أمثلة عملية وفهم ليه الميزة دي مهمة لأي مبرمج واجهة أمامية. ١. مجموعات مسما...
يوليو 07, 2025
Laravel 12.19: استخدام Attributes تنظّم Query Builder في Laravel 12.19، دلوقتي تقدر تستخدم Attribute اسمه #[UseEloquentBuilder] علشان تحدد Query Bu...
يوليو 07, 2025
إتقان التحقق الشرطي في Laravel 12 في Laravel 12، نظام التحقق (validation) قوي جدًا، وميزة التحقق الشرطي بتخليك تتحكم في القوانين بتاعتك ب...