This package was created to provide simple way to create typed enums in PHP with IDE autocompletion.
The package is an alternative for SplEnum
extension (PHP < 8.1) or native enum (PHP 8.1+). Why mleczek/enum
over SplEnum
? Much easier to install. Why mleczek/enum
over native enum? Additional name/description field over traiditional key-value pair.
composer require mleczek/enum
Properties, parameters and return types... strict type is everywhere.
function printStatus(StatusEnum $status) {
echo $status->getDisplayName();
}
printStatus(StatusEnum::active()); // Active
printStatus(MyEnum::all()[0]); // PHP Fatal error: Uncaught TypeError: Argument 1 passed to printStatus() must be an instance of StatusEnum, instance of MyEnum given
One enum value or all available values? Not a problem.
StatusEnum::active(); // StatusEnum
StatusEnum::inactive(); // StatusEnum
StatusEnum::all(); // StatusEnum[]
The all()
method returns enums that are sorted by value (case-insensitive for strings).
The same enum instance is always returned, don't worry while using identical comparision.
StatusEnum::active() === StatusEnum::active(); // true
StatusEnum::active() === StatusEnum::inactive(); // false
Serialize...
$value = $enum->getValue();
...and deserialize.
StatusEnum::parse($value); // StatusEnum
StatusEnum::parseOrDefault($value, StatusEnum::inactive()); // StatusEnum
Note: Implementation accept any type as enum value and use identical comparision. For complex types (which are not recommended) manually serialize
and unserialize
values.
Make class which extends Mleczek\Enum\Enum
and define some static methods. That's all.
use Mleczek\Enum\Enum;
final class StatusEnum extends Enum
{
public static function active(): self
{
return self::make('A', 'Active');
}
public static function inactive(): self
{
return self::make('I', 'Inactive');
}
}