prinsfrank / enums
Adds missing strictly typed methods to work with enums
Fund package maintenance!
PrinsFrank
Installs: 111 412
Dependents: 3
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: ^8.1 || ^8.2 || ^8.3 || ^8.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.43
- phpstan/phpstan: ^1.10
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^10.5
README
Enums
Adds missing strictly typed methods to work with enums
Setup
Note Make sure you are running PHP 8.1 or higher to use this package
To start right away, run the following command in your composer project;
composer require prinsfrank/enums
Or for development only;
composer require prinsfrank/enums --dev
How this package works
UnitEnum
Let's assume we have the following UnitEnum:
enum Example { case Foo; #[HasSpecialMeaning] case Bar; }
If we want to get a value by it's name from a string, we can call fromName
or tryFromName
;
UnitEnum::fromName(Example::class, 'Foo'); // Example::Foo UnitEnum::tryFromName(Example::class, 'Foo'); // Example::Foo
The difference between the two methods is the way non-existing names are handled;
UnitEnum::fromName(Example::class, 'Example'); // @throws NameNotFoundException UnitEnum::tryFromName(Example::class, 'Example'); // null
Another method that this package provides is to get an array of all the names for an enum;
UnitEnum::names(Example::class); // ['Foo', 'Bar']
And finally some methods to easily get the attributes of an enum case:
UnitEnum::hasCaseAttributes(Example::Bar, HasSpecialMeaning); // true UnitEnum::getCaseAttributes(Example::Bar); // [new HasSpecialMeaning()]
BackedEnum
Let's assume we have the following BackedEnum: (It doesn't matter if an enum is backed by a string or an integer)
enum Example: string { case Foo = 'Foo'; #[HasSpecialMeaning] case Bar = 'Bar'; }
If we want to get a value by it's name from a string, we can call fromName
or tryFromName
;
BackedEnum::fromName(Example::class, 'Foo'); // Example::Foo BackedEnum::tryFromName(Example::class, 'Foo'); // Example::Foo
The difference between the two methods is the way non-existing names are handled;
BackedEnum::fromName(Example::class, 'Example'); // @throws NameNotFoundException BackedEnum::tryFromName(Example::class, 'Example'); // null
Another method that this package provides is to get an array of all the names for an enum;
BackedEnum::names(Example::class); // ['Foo', 'Bar']
And finally some methods to easily get the attributes of an enum case:
BackedEnum::hasCaseAttributes(Example::Bar, HasSpecialMeaning); // true BackedEnum::getCaseAttributes(Example::Bar); // [new HasSpecialMeaning()]