1
0
Fork 0
mirror of https://github.com/archtechx/enums.git synced 2025-12-12 08:24:05 +00:00
Helpers for making PHP enums more lovable.
Find a file
2022-02-20 20:45:55 -06:00
.github/workflows initial 2022-02-20 20:58:57 +01:00
src use array_column() to get the names, values, and options 2022-02-20 20:45:55 -06:00
tests add names() and values() methods, resolve #1 2022-02-20 21:53:21 +01:00
.gitattributes Initial commit 2022-02-20 19:51:56 +01:00
.gitignore Initial commit 2022-02-20 19:51:56 +01:00
.php-cs-fixer.php Initial commit 2022-02-20 19:51:56 +01:00
check remove docker call 2022-02-20 21:16:03 +01:00
composer.json wip 2022-02-20 21:10:21 +01:00
LICENSE Initial commit 2022-02-20 19:51:56 +01:00
phpstan.neon Initial commit 2022-02-20 19:51:56 +01:00
phpunit.xml Initial commit 2022-02-20 19:51:56 +01:00
README.md Update README.md 2022-02-21 01:44:47 +01:00

Enums

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.

Installation

Laravel 8 or 9 are required. PHP 8.1+ is required.

composer require archtechx/enums

Usage

InvokableCases

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

Apply the trait on your enum

use ArchTech\Enums\InvokableCases;

enum TaskStatus: int
{
    use InvokableCases;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

Use static calls to get the primitive value

TaskStatus::INCOMPLETE(); // 0
TaskStatus::COMPLETED(); // 1
TaskStatus::CANCELED(); // 2

Invoke instances to get the primitive value

public function updateStatus(TaskStatus $status)
{
    $this->record->setStatus($status());
}

Names

This helper returns a list of case names in the enum.

Apply the trait on your enum

use ArchTech\Enums\Names;

enum TaskStatus: int
{
    use Names;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

Use the names() method

TaskStatus::names(); // ['INCOMPLETE', 'COMPLETED', 'CANCELED']

Values

This helper returns a list of case values in the enum.

Apply the trait on your enum

use ArchTech\Enums\Values;

enum TaskStatus: int
{
    use Values;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

Use the values() method

TaskStatus::values(); // [0, 1, 2]

Options

This helper returns an associative array of case names and values.

Apply the trait on your enum

use ArchTech\Enums\Options;

enum TaskStatus: int
{
    use Options;

    case INCOMPLETE = 0;
    case COMPLETED = 1;
    case CANCELED = 2;
}

Use the options() method

TaskStatus::options(); // ['INCOMPLETE' => 0, 'COMPLETED' => 1, 'CANCELED' => 2]

Development

Run all checks locally:

./check

Code style will be automatically fixed by php-cs-fixer.