Supercharge Your PHP Enums with archtechx/enums

July 1, 2025

Supercharge Your PHP Enums with archtechx/enums

PHP 8.1 introduced native enums—type‑safe sets of named values like statuses or roles. The archtechx/enums package adds traits that reduce boilerplate and enhance DX (Developer Experience).

✨ Key Features

  • InvokableCases: Call enum cases directly to get value or name, no more ->value.
  • Names: Get an array of case names.
  • Values: Fetch values (backed enums) or names (pure enums).
  • Options: Associative array of case => value.
  • From: Adds from(), tryFrom(), fromName(), tryFromName().
  • Metadata: Associate attributes like description/color per case.
  • Comparable: Compare enums with is(), isNot(), in(), notIn().

📦 Installation

Requires PHP 8.1+. Install via Composer:

composer require archtechx/enums

🧩 Examples

1. InvokableCases

use ArchTech\Enums\InvokableCases;

enum TaskStatus: int {
  use InvokableCases;
  case INCOMPLETE = 0;
  case COMPLETED = 1;
  case CANCELED = 2;
}

TaskStatus::COMPLETED(); // ⇒ 1

2. Names & Values

use ArchTech\Enums\Names;
use ArchTech\Enums\Values;

enum Role {
  use Names, Values;
  case ADMIN, USER, GUEST;
}

Role::names(); // ⇒ ['ADMIN', 'USER', 'GUEST']
Role::values(); // ⇒ ['ADMIN', 'USER', 'GUEST']

3. Options & stringOptions()

use ArchTech\Enums\Options;

enum TaskStatus: int {
  use Options;
  case INCOMPLETE = 0;
  case COMPLETED = 1;
}
TaskStatus::options(); 
// ⇒ ['INCOMPLETE' => 0, 'COMPLETED' => 1]

TaskStatus::stringOptions();
// ⇒ "Incomplete…"

4. From / tryFrom / fromName / tryFromName

use ArchTech\Enums\From;

enum Role: string {
  use From;
  case ADMIN = 'admin';
  case USER = 'user';
}

Role::from('admin');        // ⇒ Role::ADMIN
Role::tryFrom('unknown');   // ⇒ null
Role::fromName('USER');     // ⇒ Role::USER

5. Metadata

use ArchTech\Enums\Metadata;
use ArchTech\Enums\Meta\Meta;
use App\Enums\Meta\{Description, Color};

#[Meta(Description::class, Color::class)]
enum TaskStatus: int {
  use Metadata;
  #[Description('Incomplete')] #[Color('red')]
  case INCOMPLETE = 0;
}
TaskStatus::INCOMPLETE->description(); // ⇒ 'Incomplete'

6. Comparable

use ArchTech\Enums\Comparable;

enum TaskStatus: int {
  use Comparable;
  case INCOMPLETE = 0;
  case COMPLETED = 1;
}

TaskStatus::INCOMPLETE->is(TaskStatus::INCOMPLETE); // ⇒ true

✅ Best Practices

  • Use InvokableCases instead of ->value for readability and IDE support.
  • Populate form selects with options().
  • Use tryFrom() for safe input handling.
  • Group enums in an app/Enums directory in Laravel projects.

This package makes PHP enums way more powerful and developer-friendly—perfect for Laravel, APIs, forms, and metadata‑rich logic.

The Ultimate Managed Hosting Platform