Basic Enum
enum Status
{
case Pending;
case Active;
case Suspended;
case Deleted;
}
function updateUser(User $u, Status $newStatus): void
{
$u->status = $newStatus;
}
updateUser($user, Status::Active);
// updateUser($user, 'active'); // TypeError
Backed Enum — mit skalarem Wert
Für Serialisierung (z. B. in DB oder JSON) brauchst du einen zugrundeliegenden Wert:
enum Status: string
{
case Pending = 'pending';
case Active = 'active';
case Suspended = 'suspended';
case Deleted = 'deleted';
}
// Wert lesen
Status::Active->value; // 'active'
// Aus Wert erzeugen
Status::from('active'); // Status::Active
Status::tryFrom('invalid'); // null (statt Exception)
// Alle Cases
foreach (Status::cases() as $s) {
echo $s->name . ' = ' . $s->value . "\n";
}
Methoden in Enums
enum Status: string
{
case Pending = 'pending';
case Active = 'active';
case Suspended = 'suspended';
public function label(): string
{
return match ($this) {
self::Pending => 'Wartet auf Bestätigung',
self::Active => 'Aktiv',
self::Suspended => 'Gesperrt',
};
}
public function color(): string
{
return match ($this) {
self::Pending => 'yellow',
self::Active => 'green',
self::Suspended => 'red',
};
}
}
echo Status::Active->label(); // Aktiv