Adds missing strictly typed methods to work with enums

Maintainers

👁 PrinsFrank

Package info

github.com/PrinsFrank/enums

pkg:composer/prinsfrank/enums

Fund package maintenance!

PrinsFrank

Statistics

Installs: 561 671

Dependents: 3

Suggesters: 0

Stars: 2

Open Issues: 0

v1.4.1 2024-12-29 14:11 UTC

Requires

  • php: ^8.1 || ^8.2 || ^8.3 || ^8.4

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 3acfedf3fca35d6c6c134b45de489edff6306a2b

This package is auto-updated.

Last update: 2026-06-29 02:14:25 UTC


README

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