A collection of enum helpers for PHP.
You can read more about the idea on Twitter. I originally wanted to include the InvokableCases
helper in archtechx/helpers
, but it makes more sense to make it a separate dependency and use it inside the other package.
PHP 8.1+ is required.
composer require archtechx/enums
This helper lets you get the value of a backed enum by "invoking" it — either statically (MyEnum::FOO()
instead of MyEnum::FOO
), or as an instance ($enum()
).
That way, you can use enums as array keys:
'statuses' => [
TaskStatus::INCOMPLETE() => ['some configuration'],
TaskStatus::COMPLETED() => ['some configuration'],
],
Or access the underlying primitives for any other use cases:
public function updateStatus(int $status): void;
$task->updateStatus(TaskStatus::COMPLETED());
The main point: this is all without having to append ->value
to everything.
This approach also has decent IDE support. You get autosuggestions while typing, and then you just append ()
:
MyEnum::FOO; // => MyEnum instance
MyEnum::FOO(); // => 1
use ArchTech\Enums\InvokableCases;
enum TaskStatus: int
{
use InvokableCases;
case INCOMPLETE = 0;
case COMPLETED = 1;
case CANCELED = 2;
}
TaskStatus::INCOMPLETE(); // 0
TaskStatus::COMPLETED(); // 1
TaskStatus::CANCELED(); // 2
public function updateStatus(TaskStatus $status)
{
$this->record->setStatus($status());
}
This helper returns a list of case names in the enum.
use ArchTech\Enums\Names;
enum TaskStatus: int
{
use Names;
case INCOMPLETE = 0;
case COMPLETED = 1;
case CANCELED = 2;
}
TaskStatus::names(); // ['INCOMPLETE', 'COMPLETED', 'CANCELED']
This helper returns a list of case values in the enum.
use ArchTech\Enums\Values;
enum TaskStatus: int
{
use Values;
case INCOMPLETE = 0;
case COMPLETED = 1;
case CANCELED = 2;
}
TaskStatus::values(); // [0, 1, 2]
This helper returns an associative array of case names and values.
use ArchTech\Enums\Options;
enum TaskStatus: int
{
use Options;
case INCOMPLETE = 0;
case COMPLETED = 1;
case CANCELED = 2;
}
TaskStatus::options(); // ['INCOMPLETE' => 0, 'COMPLETED' => 1, 'CANCELED' => 2]
Run all checks locally:
./check
Code style will be automatically fixed by php-cs-fixer.