Adds missing strictly typed methods to work with enums
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
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()]
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()]