Expresia match, introdusă în PHP 8.0, este succesorul modern și sigur al clasicei instrucțiuni switch. Spre deosebire de switch, care realizează o comparare slabă de tipuri (==) și necesită instrucțiuni repetitive break pentru a preveni căderea accidentală în următoarea ramură (fall-through), match este o expresie care returnează direct o valoare și utilizează întotdeauna compararea strictă de tipuri (===).
Exemplu: Maparea statusului HTTP folosind expresia match
<?php
declare(strict_types=1);
$codStatusHttp = 404;
// match returnează direct valoarea și poate fi atribuit unei variabile
$mesaj = match ($codStatusHttp) {
200, 201 => 'Cerere procesată cu succes.',
400 => 'Date transmise incorect (Bad Request).',
401, 403 => 'Acces restricționat sau neautorizat.',
404 => 'Resursa solicitată nu a fost găsită pe server.',
500, 502, 503 => 'Eroare internă de server.',
default => 'Cod HTTP necunoscut.',
};
echo $mesaj; // Output: Resursa solicitată nu a fost găsită pe server.
Diferențe Fundamentale: match vs. switch
| Criteriu | Expresia match (PHP 8+) | Instrucțiunea switch (veche) |
|---|---|---|
| Tip de comparare | Strictă (===): 0 nu se potrivește niciodată cu '0' sau false. |
Slabă (==): predispusa la bug-uri subtile de conversie automată. |
| Valoare returnată | Este o expresie care returnează o valoare directă (poate fi salvată în variabilă). | Este o instrucțiune de control al fluxului; nu returnează valori. |
| Instrucțiunea break | Nu este necesară (oprește execuția imediat ce găsește prima potrivire). | Obligatorie după fiecare case (risc de cădere în cascada următoare). |
| Cazul default | Aruncă excepția UnhandledMatchError dacă nicio ramură nu se potrivește și lipsește default. |
Ignoră silențios cazul neacoperit dacă lipsește default. |