📖 Scenario: You are creating a simple program to represent different user roles in a system. Each role has a specific numeric code that the system uses internally.
🎯 Goal: Build a PHP enum with backed integer values for user roles, then print the numeric code of a specific role.
📋 What You'll Learn
Create a backed enum called UserRole with integer values
Include roles: Admin = 1, Editor = 2, Viewer = 3
Create a variable called role and assign it the UserRole::Editor
Print the integer value of the role variable
💡 Why This Matters
🌍 Real World
Enums with backed values are used in real systems to represent fixed sets of options with specific codes, like user roles, status codes, or categories.
💼 Career
Understanding enums helps you write clearer, safer code that is easier to maintain and less error-prone, a valuable skill for PHP developers.
Progress0 / 4 steps
1
Create the enum UserRole with backed integer values
Write a backed enum called UserRole with these exact entries: Admin = 1, Editor = 2, and Viewer = 3.
PHP
Hint
Use enum UserRole: int and define each case with case Name = value;.
2
Assign the UserRole::Editor to a variable
Create a variable called role and assign it the value UserRole::Editor.
PHP
Hint
Use $role = UserRole::Editor; to assign the enum value.
3
Get the integer value from the enum variable
Create a variable called roleValue and assign it the integer value of $role using the value property.
PHP
Hint
Use $role->value to get the integer value from the enum.
4
Print the integer value of the role
Write a print statement to display the value of $roleValue.
PHP
Hint
Use print($roleValue); to show the number 2.
Practice
(1/5)
1.
What is the main purpose of using backed enums in PHP?
easy
A. To allow enums to inherit from classes
B. To link enum cases to fixed strings or numbers
C. To enable enums to have methods
D. To make enums mutable
Solution
Step 1: Understand enum backed values
Backed enums associate each enum case with a fixed string or integer value.
Step 2: Identify the purpose
This linking helps in storing, comparing, or displaying enum data easily.
Final Answer:
To link enum cases to fixed strings or numbers -> Option B
Quick Check:
Backed enums link cases to values = A [OK]
Hint: Backed enums always connect cases to fixed values [OK]
Common Mistakes:
Thinking enums can inherit classes
Confusing backed enums with mutable enums
Assuming enums cannot have methods
2.
Which of the following is the correct syntax to declare a backed enum with string values in PHP?
enum Status: string {
case ACTIVE = 'active';
case INACTIVE = 'inactive';
}
easy
A. enum Status: string { case ACTIVE = 'active'; case INACTIVE = 'inactive'; }
B. enum Status { case ACTIVE = 'active'; case INACTIVE = 'inactive'; }
C. enum Status: int { case ACTIVE = 'active'; case INACTIVE = 'inactive'; }
D. enum Status: string { ACTIVE = 'active'; INACTIVE = 'inactive'; }
Solution
Step 1: Check enum declaration syntax
Backed enums require specifying the type after the enum name, e.g., : string.
Step 2: Verify case declarations
Each case must use the case keyword and assign a value with =.
Final Answer:
enum Status: string { case ACTIVE = 'active'; case INACTIVE = 'inactive'; } -> Option A
Quick Check:
Backed enum syntax with type and cases = B [OK]
Hint: Backed enums need type after enum name and case keyword [OK]
Common Mistakes:
Omitting the type after enum name
Not using 'case' keyword before cases
Using wrong type like int for string values
3.
What will be the output of the following PHP code?
enum Color: int {
case RED = 1;
case GREEN = 2;
case BLUE = 3;
}
echo Color::from(2)->name;
medium
A. Color::GREEN
B. 2
C. GREEN
D. Error: No case for value 2
Solution
Step 1: Understand Color::from(2)
The from() method returns the enum case matching the value 2, which is GREEN.
Step 2: Access the name property
Using ->name returns the case name as a string, here "GREEN".
Final Answer:
GREEN -> Option C
Quick Check:
from(2) returns GREEN name = GREEN [OK]
Hint: from(value) returns enum case; ->name gives case name [OK]
Common Mistakes:
Printing the value instead of the name
Confusing from() with tryFrom()
Expecting full enum class name output
4.
Identify the error in the following PHP enum backed values code:
enum Status: string {
case PENDING = 'pending';
case COMPLETED = 'completed';
}
$status = Status::from('done');
medium
A. No error, code runs fine
B. Compile error: Enum must use int type
C. Syntax error: Missing semicolon after enum cases
D. Runtime error: Value 'done' not found in enum cases
Solution
Step 1: Check the from() method usage
The from() method throws an error if the value does not match any enum case.
Step 2: Analyze the value 'done'
Since 'done' is not a defined case value, a runtime error occurs.
Final Answer:
Runtime error: Value 'done' not found in enum cases -> Option D
Quick Check:
from() with invalid value causes runtime error = D [OK]
Hint: from() fails if value not in enum cases [OK]
Common Mistakes:
Assuming from() returns null on failure
Thinking syntax error due to semicolons
Believing enum must be int type only
5.
Given the following enum, which code snippet correctly converts a string value to an enum case safely without throwing an error?
enum Direction: string {
case NORTH = 'north';
case SOUTH = 'south';
case EAST = 'east';
case WEST = 'west';
}
Choose the correct usage:
hard
A. $dir = Direction::tryFrom('east');
B. $dir = Direction::from('southwest');
C. $dir = Direction::from('up');
D. $dir = Direction::tryFrom('down');
Solution
Step 1: Understand from() vs tryFrom()
from() throws error if value not found; tryFrom() returns null instead.
Step 2: Check each option's value
Only tryFrom('east') matches a valid case and safely returns the enum case.
Final Answer:
$dir = Direction::tryFrom('east'); -> Option A
Quick Check:
tryFrom() safely converts valid value = C [OK]
Hint: Use tryFrom() to avoid errors on invalid values [OK]
Common Mistakes:
Using from() with invalid values causing errors
Expecting tryFrom() to throw errors
Confusing enum case names with values
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.