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

المدونة

شرح مفصل لكل هوك في React

يوليو 01, 2025

🎣 شرح React Hooks وبأمثلة عملية 🧠 useState بيعمل إيه: بيضيف حالة داخلية (state) جوا أي مكون شغال بوظيفة. مثال عملي: import React, { useSta...

دليل للأنيميشن المتحركة بالسكّول بس بـ CSS

يونيو 26, 2025

دليل للأنيميشن المتحركة بالسكّول بـ CSS دلوقتي تقدر تربط الأنيميشن بتاعتك بـ السكّول من غير جافاسكريبت — كله CSS بحت. 1. التلات مكونات بتوع...

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

يونيو 03, 2025

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

React Labs: View Transitions وActivity

يونيو 17, 2025

React Labs: View Transitions وActivity المنشور اتكتب يوم 23 أبريل 2025 من Ricky Hanlon. في React Labs النهارده بيقدّموا ميزتين تجريبيّتين مودرن...

وقّف نسخ الكود! اتعلم تستخدم Traits في Laravel صح

يوليو 01, 2025

🚫 وقّف نسخ الكود! لو عندك نفس المنطق في كذا Model أو Controller زي Slug أو Logging، Traits في Laravel هتوفر عليك تعب الكتابة والتكرار. 1. إيه هو...

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

يوليو 07, 2025

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

The Ultimate Managed Hosting Platform