Skip to content

InvokableCases

Get the value of a backed enum, or the name of a pure enum, by invoking it statically (MyEnum::FOO()) or as an instance ($enum()).

Eliminates the need to append ->value when working with backed enums:

// Without InvokableCases
'statuses' => [
TaskStatus::Incomplete->value => ['some configuration'],
TaskStatus::Completed->value => ['some configuration'],
];
// With InvokableCases
'statuses' => [
TaskStatus::Incomplete() => ['some configuration'],
TaskStatus::Completed() => ['some configuration'],
];
use Cline\Enums\Concerns\InvokableCases;
enum TaskStatus: int
{
use InvokableCases;
case Incomplete = 0;
case Completed = 1;
case Canceled = 2;
}
enum Role
{
use InvokableCases;
case Administrator;
case Subscriber;
case Guest;
}

Get the primitive value by invoking cases statically:

// Backed enum returns the value
TaskStatus::Incomplete(); // 0
TaskStatus::Completed(); // 1
TaskStatus::Canceled(); // 2
// Pure enum returns the name
Role::Administrator(); // 'Administrator'
Role::Subscriber(); // 'Subscriber'
Role::Guest(); // 'Guest'

Invoke enum instances to get their primitive value:

public function updateStatus(TaskStatus $status, Role $role)
{
// Invoke the instances to get their values
$this->record->setStatus($status(), $role());
}

Configure mappings and associative arrays:

$config = [
TaskStatus::Incomplete() => ['color' => 'yellow', 'icon' => 'clock'],
TaskStatus::Completed() => ['color' => 'green', 'icon' => 'check'],
TaskStatus::Canceled() => ['color' => 'red', 'icon' => 'x'],
];

Pass primitive values to methods expecting them:

public function updateStatus(int $status): void;
// Clean invocation without ->value
$task->updateStatus(TaskStatus::Completed());

Use in database queries without appending ->value:

$tasks = Task::where('status', TaskStatus::Incomplete())->get();

InvokableCases provides full IDE autocompletion. Add parentheses to convert suggestions to primitive values:

MyEnum::FOO; // MyEnum instance (IDE autocompletes)
MyEnum::FOO(); // Primitive value (add parentheses)