Skip to content

Adds missing strictly typed methods to work with enums

License

Notifications You must be signed in to change notification settings

PrinsFrank/enums

Repository files navigation

Banner

Enums

GitHub PHP Version Support codecov PHPStan Level

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()]