paillechat/php-enum
PHP 7+ enum library: define enums by extending Enum and declaring constants, then instantiate via static named calls (IssueType::ONE()). Instances are strict-equal singletons, work with in_array/type hints, and can convert to/from names.
Pros:
UserRole, OrderStatus).Cons:
backed enums, try_from), which could become a technical debt risk.Laravel-Specific Use Cases:
Rule::in(['active', 'inactive']) with Status::ACTIVE()->value (if using getName()).$casts or Attribute casting (e.g., protected $casts = ['status' => EnumCast::class]).createByName() for JSON payloads (e.g., Request::validate(['status' => Status::class])).if ($user->role === Role::ADMIN)).Challenges:
getValue() or equals() may trigger warnings in Laravel’s strict mode (PHP 8+).Enum trait/class, this package could conflict.partialMockClass()).@phpstan-ignore-next-line).myclabs/php-enum, though also outdated).spatie/enum) with active maintenance?@method annotations in PHP 8.1+?Attribute casting or custom accessors (e.g., getStatusNameAttribute()).Rule::in([Status::ACTIVE->name, Status::INACTIVE->name]) or extend Illuminate\Validation\Rule for enum-specific rules.createByName() for deserialization (e.g., in App\Services\EnumResolver).@php $statuses = Status::all()).// Before (paillechat/php-enum)
Status::ACTIVE()->getName();
// After (PHP 8.1)
Status::ACTIVE->name;
if ($status == 1)).UserRole, PaymentStatus).composer.json and suppress warnings if needed:
"config": {
"preferred-install": "dist",
"allow-plugins": {
"phpstan/phpstan": false
}
}
php >=7.0.Status::ACTIVE->name → 'active').if (config('app.use_enums')) {
return Status::ACTIVE->name;
}
return 'active';
const STATUS_ACTIVE = 'active').@method annotations (better than raw constants).getValue(), equals(), etc., may clutter logs.Undefined enum constant 'INVALID_STATUS').docs/enums.md).Status::ACTIVE->name → 'active' in DB).Undefined enum constant if createByName() receives invalid input (e.g., Status::createByName('invalid')).TypeError if comparing enums with non-enum values (e.g., Status::ACTIVE == 'active').getValue()).Status::ACTIVE and 'active' strings).createByName(), getName(), and strict comparison (===).Status::ACTIVE returnsHow can I help you explore Laravel packages today?