try-again-later / multi-backed-enum
A small PHP library for creating enums with cases backed by multiple values.
Requires
- php: >=8.1.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2025-06-26 20:10:30 UTC
README
Небольшая библиотека для PHP 8.1+, позволяющая создавать перечисления, вариантам которых может соответствовать сразу несколько скалярных значений (целых чисел или строк). Скалярные значения указываются с помощью атрибутов на вариантах перечисления, а новые методы добавляются через трейты.
Библиотека позволяет конвертировать скалярные значения в варианты перечисления и обратно.
По сути это как "backed" перечисления из PHP 8.1, но с возможностью указать несколько значений для
одного варианта. Интерфейс повторяет методы "backed" перечислений из PHP 8.1, но также включает
метод allValues()
, позволяющий получить весь список скалярных значений назначенных для конкретного
варианта перечисления.
A small PHP 8.1+ library for creating enumerations with cases backed by multiple values. Useful when you have a bunch of "backing" values (strings or integers) all of which identify the same enumeration case. Backing values are specified using attributes applied to the enumeration cases and the new methods are added via traits.
The library allows you to convert backing values into enumeration cases and vice versa.
The interface mimics PHP 8.1.0 backed enums with an addition of method allValues()
, which returns
a list of all "backing" values.
Installation
Via composer:
$ composer require try-again-later/multi-backed-enum
Example
use TryAgainLater\MultiBackedEnum\{MultiBackedEnum, Values, MakeMultiBacked}; #[MultiBackedEnum] enum Status { #[Values('on', 'true', 'yes')] case ON; #[Values('off', 'false', 'no', 'null')] case OFF; use MakeMultiBacked; } // Status::ON $status = Status::tryFrom('true'); // Throws a ValueError $status = Status::from('some bad value'); // Returns the first one from the list. // 'off' $stringStatus = Status::OFF->value(); // ['on', 'true', 'yes'] $stringStatuses = Status::ON->allValues();
Running tests and linter (on the library iteself)
composer test
composer lint