PHP 8.4 Enums and Attributes: Writing Cleaner Domain Models
Moving Past Magic Strings
For decades, PHP developers relied on arrays of magic strings or classes full of public constants to represent specific states (like `STATUS_PENDING` or `STATUS_PAID`). This approach was error-prone, lacked strict typing, and made refactoring a nightmare. With the maturity of PHP 8.4, Enums and Attributes have fundamentally changed how we build domain models.
The Power of Backed Enums
Enums allow you to define a custom type that is restricted to a specific set of values. A Backed Enum takes this further by associating those cases with a scalar value (like a string or integer) for database storage.
Example in Practice
Instead of typing public string $status; in your User model, you type public UserStatus $status;. Now, PHP’s strict typing engine guarantees that the status can only ever be a valid UserStatus enum case. It completely eliminates a massive category of validation bugs.
Attributes: Metadata Made Easy
Before Attributes (previously known as Annotations), frameworks like Doctrine or Symfony required you to write metadata inside DocBlocks (comments) which were then parsed using expensive reflection APIs. Attributes are native PHP syntax for adding machine-readable metadata to classes, methods, and properties.
Clean Architecture
By combining Enums and Attributes, your domain models become infinitely cleaner. You can attach a #[Table('users')] attribute directly above your class, or a #[Column(type: UserStatus::class)] attribute above your enum property, centralizing your configuration and logic in one readable file.
editor's pick
latest video
news via inbox
Nulla turp dis cursus. Integer liberos euismod pretium faucibua

