Bird
Raised Fist0
PHPprogramming~5 mins

Match expression (PHP 8)

Choose your learning style10 modes available
Introduction

The match expression helps you choose a value based on a condition, like a smarter and cleaner switch-case. It makes your code easier to read and write.

When you want to select a value based on a variable's value.
When you need a simpler alternative to multiple if-else statements.
When you want to return a value directly from conditions.
When you want to avoid forgetting break statements in switch cases.
When you want to write clearer and less error-prone conditional code.
Syntax
PHP
match (expression) {
    value1 => result1,
    value2, value3 => result2,
    default => defaultResult,
};

The match expression returns a value directly.

It uses strict comparison (===), so types must match exactly.

Examples
Returns a message based on the color value.
PHP
$result = match ($color) {
    'red' => 'Stop',
    'yellow' => 'Caution',
    'green' => 'Go',
    default => 'Unknown color',
};
Uses conditions inside match by matching true, to assign a grade message.
PHP
$grade = 85;
$message = match (true) {
    $grade >= 90 => 'Excellent',
    $grade >= 75 => 'Good',
    $grade >= 60 => 'Pass',
    default => 'Fail',
};
Groups multiple values to the same result.
PHP
$day = 3;
$dayName = match ($day) {
    1, 7 => 'Weekend',
    2, 3, 4, 5, 6 => 'Weekday',
    default => 'Invalid day',
};
Sample Program

This program uses a match expression to print a message based on the score value.

PHP
<?php
$score = 72;
$message = match (true) {
    $score >= 90 => 'Great job!',
    $score >= 70 => 'Good effort!',
    $score >= 50 => 'You passed.',
    default => 'Try again.',
};
echo $message;
OutputSuccess
Important Notes

Match expressions use strict comparison (===), so '1' (string) and 1 (int) are different.

Every match arm must return a value; no fall-through like switch.

Match expressions always return a value, so you can assign them directly to variables.

Summary

Match expressions simplify choosing values based on conditions.

They return values directly and use strict comparison.

They help write cleaner and less error-prone code than switch-case.

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