PHP8: Match expression

28.11.2021 | PHP

Löst einige Probleme der switch-Kontrollstruktur.

  • Unlike switch, it will evaluate to a value much like ternary expressions.
  • A match expression returns a value.
  • Unlike switch, the comparison is an identity check (===) rather than a weak equality check (==). 
  • A match expression must be exhaustive. If the subject expression is not handled by any match arm an UnhandledMatchError is thrown.
  • match hat einen impliziten Break, so daß man ihn hier nicht vergessen kann. 

statt:

switch (1) {
    case 0:
        $y = 'Foo';
        break;
    case 1:
        $y = 'Bar';
        break;
    case 2:
        $y = 'Baz';
        break;
    case 3:
    case 4:
        $y = 'Dasselbe für 3 und 4';
        break;
}

echo $y;

Kann man jetzt schreiben:

echo match (1) {
    0 => 'Foo',
    1 => 'Bar',
    2 => 'Baz',
    3,4 => 'Dasselbe für 3 und 4' 
};

Eine nicht abgefangene Condition erzeugt einen UnhandledMatchError.

<?php
$condition = 5;

try {
    match ($condition) {
        1, 2 => foo(),
        3, 4 => bar(),
    };
} catch (\UnhandledMatchError $e) {
    var_dump($e);
}

 

Details siehe https://www.php.net/manual/en/control-structures.match.php

Analyse

Entwurf

Development

Launch