Concept Flow - Enums in PHP
Define enum with cases
Use enum value in code
Compare or switch on enum
Get enum name or value
End
This flow shows how you define an enum, use its values, compare or switch on them, and access their names or values.
<?php
enum Status {
case Pending;
case Approved;
case Rejected;
}
$current = Status::Approved;
if ($current === Status::Approved) {
echo "Approved!";
}
?>| Step | Action | Evaluation | Result |
|---|---|---|---|
| 1 | Define enum Status with cases Pending, Approved, Rejected | N/A | Enum Status created |
| 2 | Assign $current = Status::Approved | N/A | $current holds Status::Approved |
| 3 | Check if $current === Status::Approved | $current === Status::Approved | True |
| 4 | Execute echo "Approved!" | Print output | Approved! |
| 5 | End of script | N/A | Script ends |
| Variable | Start | After Step 2 | After Step 5 |
|---|---|---|---|
| $current | undefined | Status::Approved | Status::Approved |
PHP Enums let you define named cases as a type. Use enum cases with EnumName::CaseName. Compare enum cases with === for exact match. Enums can be pure or backed by values. Use enums to make code clearer and safer.
enum in PHP?: string, and cases with assigned values.enum Status: string { case Active = 'active'; ... }. enum Status { case Active = 'active'; case Inactive = 'inactive'; } misses the type. enum Status: int { case Active = 'active'; case Inactive = 'inactive'; } uses wrong type int with string values. enum Status: string { Active = 'active'; Inactive = 'inactive'; } misses case keyword.enum Direction { case North; case South; case East; case West; }
$dir = Direction::East;
echo $dir->name;$dir->name returns the case name as a string.$dir is assigned Direction::East, so $dir->name is "East".enum Color {
case Red = 1;
case Green = 2;
case Blue;
}: int).Color assigns values to some cases but does not specify : int after the enum name, causing a syntax error.enum Status: string {
case Pending = 'pending';
case Approved = 'approved';
case Rejected = 'rejected';
}$input to the matching Status enum case or returns null if no match?from() which throws error if no match, and tryFrom() which returns null if no match.tryFrom() is correct.Pass the test and this pattern moves unknown