Bird
Raised Fist0
PHPprogramming~10 mins

Match expression (PHP 8) - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Match expression (PHP 8)
Evaluate expression
↓
Compare with each case
↓
Match found?
No→Throw error or default
Yes↓
Return matched case value
↓
End
The match expression evaluates a value, compares it to cases, and returns the matching case's result or a default.
Execution Sample
PHP
<?php
$color = 'red';
$result = match($color) {
  'red' => 'Stop',
  'green' => 'Go',
  default => 'Unknown'
};
echo $result;
This code matches the color variable to cases and prints the matching message.
Execution Table
StepExpression ValueCase CheckedMatch?ActionOutput
1'red''red'YesReturn 'Stop'
2'green'NoSkip
3defaultN/ANot reached
4End of matchStop
💡 Match found at case 'red', returned 'Stop', execution ends.
Variable Tracker
VariableStartAfter match
$colorundefined'red'
$resultundefined'Stop'
Key Moments - 2 Insights
Why does the match expression not continue checking other cases after a match?
Because match returns immediately when a case matches, as shown in step 1 of the execution_table where it returns 'Stop' and stops.
What happens if no case matches and there is no default?
Match throws an UnhandledMatchError error. This is not shown here because default is provided.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of $result after step 1?
A'Unknown'
B'Stop'
C'Go'
Dundefined
💡 Hint
Check the 'Action' and 'Output' columns at step 1 in the execution_table.
At which step does the match expression stop checking cases?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Match?' column and when the action returns a value in the execution_table.
If $color was 'blue' instead of 'red', which case would be matched?
A'red'
B'green'
Cdefault
DNo match, error thrown
💡 Hint
Refer to the default case in the code and execution_table description.
Concept Snapshot
match(expression) {
  case1 => result1,
  case2 => result2,
  default => defaultResult
};

- Evaluates expression once
- Compares strictly (===) to cases
- Returns matched case value immediately
- Throws error if no match and no default
Full Transcript
The match expression in PHP 8 evaluates a given expression and compares it strictly to each case. When a match is found, it returns the corresponding value immediately and stops checking further cases. If no case matches and a default is provided, it returns the default value. Without a default, it throws an error. This example matches the variable $color to 'red', 'green', or default and returns a message accordingly.

Practice

(1/5)
1. What is the main advantage of using a match expression in PHP 8 compared to a switch statement?
easy
A. It returns a value and uses strict comparison.
B. It allows fall-through between cases.
C. It only works with strings.
D. It requires a default case.

Solution

  1. Step 1: Understand match vs switch behavior

    Match expressions return a value directly, unlike switch which is a statement.
  2. Step 2: Identify comparison type

    Match uses strict comparison (===), while switch uses loose comparison (==).
  3. Final Answer:

    It returns a value and uses strict comparison. -> Option A
  4. Quick Check:

    Match returns value + strict check [OK]
Hint: Remember: match returns values and checks types strictly [OK]
Common Mistakes:
  • Thinking match allows fall-through like switch
  • Believing match works only with strings
  • Assuming default case is mandatory in match
2. Which of the following is the correct syntax for a simple match expression in PHP 8?
easy
A. match ($value) { 1 => 'one', 2 => 'two', default => 'other' };
B. match $value { 1: 'one', 2: 'two', default: 'other' };
C. match ($value) { 1: 'one', 2: 'two', default => 'other' };
D. match ($value) { 1 => 'one', 2 => 'two', _ => 'other' };

Solution

  1. Step 1: Recall match syntax

    Match uses parentheses around the expression and curly braces with arrows (=>) for cases.
  2. Step 2: Identify correct default syntax

    Default case uses the keyword default with =>, not _ or colon.
  3. Final Answer:

    match ($value) { 1 => 'one', 2 => 'two', default => 'other' }; -> Option A
  4. Quick Check:

    Correct syntax uses parentheses, arrows, and default keyword [OK]
Hint: Use parentheses and arrows => with default keyword [OK]
Common Mistakes:
  • Using colon : instead of arrow =>
  • Omitting parentheses around the match expression
  • Using _ instead of default for fallback
3. What will be the output of the following PHP code?
$status = 2;
$message = match($status) {
1 => 'Pending',
2 => 'Approved',
3 => 'Rejected',
default => 'Unknown'
};
echo $message;
medium
A. Pending
B. Unknown
C. Rejected
D. Approved

Solution

  1. Step 1: Identify the value of $status

    $status is set to 2.
  2. Step 2: Match $status to cases

    Case 2 matches 'Approved'.
  3. Final Answer:

    Approved -> Option D
  4. Quick Check:

    Value 2 matches 'Approved' [OK]
Hint: Match returns the value for exact case match [OK]
Common Mistakes:
  • Confusing default case with matched case
  • Assuming loose comparison might match wrong case
  • Forgetting match returns a value, not prints it
4. Identify the error in this PHP 8 match expression code:
$input = 'banana';
$result = match($input) {
'apple' => 'fruit',
'carrot' => 'vegetable'
};
echo $result;
medium
A. Match expression cannot use strings as cases.
B. Syntax error due to missing semicolon after match.
C. Missing default case causes UnhandledMatchError.
D. Variable $result is not assigned properly.

Solution

  1. Step 1: Check for default case presence

    The match expression lacks a default case for unmatched values.
  2. Step 2: Understand consequences

    If input does not match any case, PHP throws UnhandledMatchError.
  3. Final Answer:

    Missing default case causes UnhandledMatchError. -> Option C
  4. Quick Check:

    Always include default to avoid errors [OK]
Hint: Always add default case to handle unmatched values [OK]
Common Mistakes:
  • Assuming default case is optional
  • Thinking strings can't be used as match cases
  • Confusing syntax errors with runtime errors
5. You want to categorize a number into 'small', 'medium', or 'large' using a PHP 8 match expression. Which code correctly implements this logic for:
- small: 1 or 2
- medium: 3 or 4
- large: any other number
$num = 3;
// Your match expression here
hard
A. match($num) { 1, 2 => 'small', 3, 4 => 'medium', _ => 'large' };
B. match($num) { 1, 2 => 'small', 3, 4 => 'medium', default => 'large' };
C. match $num { 1, 2 => 'small', 3, 4 => 'medium', default => 'large' };
D. match($num) { 1, 2: 'small', 3, 4: 'medium', default => 'large' };

Solution

  1. Step 1: Use comma-separated values for multiple cases

    PHP 8 match allows multiple values per case separated by commas.
  2. Step 2: Use correct default keyword

    Default fallback must use default keyword, not underscore or other.
  3. Final Answer:

    match($num) { 1, 2 => 'small', 3, 4 => 'medium', default => 'large' }; -> Option B
  4. Quick Check:

    Multiple values + default keyword = match($num) { 1, 2 => 'small', 3, 4 => 'medium', default => 'large' }; [OK]
Hint: Use commas for multiple cases and default keyword for fallback [OK]
Common Mistakes:
  • Using _ instead of default for fallback
  • Not separating multiple cases with commas
  • Confusing syntax with switch statement
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard