يتم دعم الصيانة لهذا المشروع عبر Tidelift.
أولاً، وبشكل رئيسي، SplEnum
غير مدمج في PHP، يجب عليك تثبيت الامتداد بشكل منفصل.
يوفر استخدام التعداد بدلاً من ثوابت الفئة المزايا التالية:
يمكنك استخدام التعداد كنوع معلمة: function setAction(Action $action) {
يمكنك استخدام التعداد كنوع الإرجاع: function getAction() : Action {
يمكنك إثراء التعداد بالطرق (مثل format
، parse
، ...)
يمكنك تمديد التعداد لإضافة قيم جديدة (اجعل التعداد الخاص بك final
لمنعه)
يمكنك الحصول على قائمة بجميع القيم الممكنة (انظر أدناه)
ليس المقصود من فئة Enum هذه أن تحل محل ثوابت الفئة، ولكن فقط لاستخدامها عندما يكون ذلك منطقيًا.
composer require myclabs/php-enum
استخدم MyCLabsEnumEnum;/** * تعداد الإجراء * * @extends Enum<Action::*> */ الإجراء النهائي يمتد التعداد {private const VIEW = 'view';private const EDIT = 'edit'; }
$action = Action::VIEW();// أو باستخدام مفتاح ديناميكي:$action = Action::$key();// أو باستخدام قيمة ديناميكية:$action = Action::from($value);/ / أو$action = new Action($value);
كما ترون، يتم تنفيذ الطرق الثابتة تلقائيًا لتوفير وصول سريع إلى قيمة التعداد.
إحدى ميزات استخدام ثوابت الفئة هي القدرة على استخدام التعداد كنوع معلمة:
دالة setAction(الإجراء $action) {// ...}
__construct()
يتحقق المنشئ من وجود القيمة في التعداد
__toString()
يمكنك echo $myValue
وسيعرض قيمة التعداد (قيمة الثابت)
getValue()
تُرجع القيمة الحالية للتعداد
getKey()
يُرجع مفتاح القيمة الحالية في Enum
equals()
يختبر ما إذا كانت مثيلات التعداد متساوية (يُرجع true
إذا كانت قيم التعداد متساوية، ويعيد الخطأ إذا كانت قيم false
متساوية)
الأساليب الثابتة:
from()
ينشئ نسخة التعداد، والتحقق من وجود القيمة في التعداد
طريقة toArray()
تُرجع جميع القيم الممكنة كمصفوفة (اسم ثابت في المفتاح، قيمة ثابتة في القيمة)
keys()
تُرجع أسماء (مفاتيح) جميع الثوابت في فئة التعداد
values()
تُرجع مثيلات فئة Enum لجميع ثوابت Enum (الاسم الثابت في المفتاح، ومثيل Enum في القيمة)
isValid()
تحقق مما إذا كانت القيمة التي تم اختبارها صالحة في مجموعة التعداد
isValidKey()
تحقق مما إذا كان المفتاح الذي تم اختباره صالحًا في مجموعة التعداد
assertValidValue()
التأكد من صحة القيمة في مجموعة التعداد، ورمي الاستثناء بخلاف ذلك
search()
مفتاح العودة للقيمة التي تم البحث عنها
يمتد الإجراء النهائي للفئة Enum {private const VIEW = 'view';private const EDIT = 'edit'; }// الطريقة الثابتة:$action = Action::VIEW();$action = Action::EDIT();
يتم تنفيذ مساعدات الطريقة الثابتة باستخدام __callStatic()
.
إذا كنت مهتمًا بالإكمال التلقائي لـ IDE، فيمكنك إما تنفيذ الطرق الثابتة بنفسك:
يمتد الإجراء النهائي للفئة Enum {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action(self::VIEW); } }
أو يمكنك استخدام phpdoc (وهذا مدعوم في PhpStorm على سبيل المثال):
/** * @method static Action VIEW() * @method static Action EDIT() */ Final class Action Extends Enum {private const VIEW = 'view';private const EDIT = 'edit'; }
وصل التعداد الأصلي إلى PHP في الإصدار 8.1: https://www.php.net/enumerations
إذا كان مشروعك يعمل بنظام PHP 8.1+ أو كانت مكتبتك تحتوي على الحد الأدنى من المتطلبات، فيجب عليك استخدامه بدلاً من هذه المكتبة.
عند الترحيل من myclabs/php-enum
، يجب أن يكون الجهد صغيرًا إذا كان الاستخدام بالطريقة الموصى بها:
الثوابت الخاصة
الفصول النهائية
لم يتم تجاوز أي طريقة
تغييرات للهجرة:
يجب تغيير تعريف الفئة من
/** * @method static Action VIEW() * @method static Action EDIT() */ Final class Action Extends Enum {private const VIEW = 'view';private const EDIT = 'edit'; }
ل
إجراء التعداد: string{case VIEW = 'view';case EDIT = 'edit'; }
ستستمر جميع الأماكن التي تم استخدام الفصل فيها كنوع في العمل.
الاستخدامات والتغيير المطلوب:
عملية | myclabs/php-enum | التعداد الأصلي |
---|---|---|
الحصول على مثيل سوف يتغير من | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
قم بإنشاء تعداد من قيمة مدعومة | $enumCase = new Action('view') | $enumCase = Action::from('view') |
احصل على القيمة المدعومة لمثيل التعداد | $enumCase->getValue() | $enumCase->value |
قارن بين مثيلين للتعداد | $enumCase1 == $enumCase2 أو $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
احصل على المفتاح/اسم مثيل التعداد | $enumCase->getKey() | $enumCase->name |
احصل على قائمة بجميع المثيلات الممكنة للتعداد | Action::values() | Action::cases() |
احصل على خريطة للمثيلات المحتملة للتعداد المعين بالاسم | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) أو (new ReflectionEnum(Action::class))->getConstants() |
احصل على قائمة بجميع الأسماء المحتملة للتعداد | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
احصل على قائمة بجميع القيم المدعومة الممكنة للتعداد | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
احصل على خريطة للقيم المدعومة المحتملة للتعداد المعين بالاسم | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) أو array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
PHP 8.1+ التعداد الأصلي
رسم خرائط التعداد العقيدي
تكامل Symfony ParamConverter
التكامل PHPStan