Supercharge Your PHP Enums with archtechx/enums
July 1, 2025Supercharge 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
InvokableCasesinstead of->valuefor readability and IDE support. - Populate form selects with
options(). - Use
tryFrom()for safe input handling. - Group enums in an
app/Enumsdirectory in Laravel projects.
This package makes PHP enums way more powerful and developer-friendly—perfect for Laravel, APIs, forms, and metadata‑rich logic.
Blog
Jun 29, 2025
How OAuth Works OAuth is a protocol that allows third-party applications to access user data without sharing passwords. It's the backbone of secure a...
Jul 13, 2025
Laravel provides multiple ways to write reusable query logic. The two most common approaches are using Scopes with Traits or the newer #[UseEloquentBu...
May 23, 2026
The Journey of a Request Inside Laravel: The Core Concept and Complete Lifecycle A deep dive into how Laravel processes requests from start to...
Jul 20, 2025
Laravel Context is one of the most powerful new features in Laravel 12. It allows you to attach contextual data (like user ID, IP address, request pat...
Jul 07, 2025
How to cache report queries with fixed timelines How to generate large reports asynchronously using job queues 1. 🧠 Report Query Caching wi...
Jul 07, 2025
Laravel 12.19: Elegant Query Builders with PHP Attributes In Laravel 12.19, you can now use the #[UseEloquentBuilder] PHP attribute to assign a cus...