Expresia match în PHP
PHP 8.0 a adăugat expresia match, o rudă apropiată a lui switch. Există trei diferențe principale: produce o valoare, compară folosind comparația strictă (===) și nu are nevoie de instrucțiuni break.
Expresie match de bază
Valoarea lui $status decide ce șir de caractere returnează match, iar acel șir este stocat în $text:
Ieșire: script PHP
<?php
$status = 1;
$text = match($status) {
1 => "Pe locuri",
2 => "Fiți gata",
3 => "Start",
};
echo $text;
?>
Cuvântul cheie default
O ramură default prinde tot ce nu prind celelalte ramuri. Merită adăugată, pentru că, dacă nicio ramură nu se potrivește și nu există default, PHP aruncă o eroare UnhandledMatchError.
Match cu default
Nicio ramură nu acoperă valoarea 5, așa că ramura default furnizează rezultatul:
Ieșire: script PHP
<?php
$status = 5;
$text = match($status) {
1 => "Pe locuri",
2 => "Fiți gata",
3 => "Start",
default => "Necunoscut",
};
echo $text;
?>
Mai multe valori într-o ramură
O ramură poate acoperi mai multe valori: scrie-le separate prin virgule. Ramura este aleasă dacă expresia se potrivește cu oricare dintre ele.
Match cu mai multe valori
Aici zilele sunt grupate în trei ramuri, cu virgule între valorile din fiecare:
Ieșire: script PHP
<?php
$day = 2;
$text = match($day) {
1, 2 => "Început de săptămână lucrătoare",
3, 4, 5 => "Mijloc/final de săptămână lucrătoare",
6, 7 => "Weekend",
};
echo $text;
?>
Comparație strictă
Pentru că match compară cu ===, o valoare trebuie să aibă atât tipul de date corect, cât și conținutul corect. O instrucțiune switch este mai permisivă, deoarece compară lax (==).
Comparație strictă cu match
Șirul de caractere "1" nu se potrivește cu întregul 1 la o comparație strictă, așa că este folosită ramura default:
Ieșire: script PHP
<?php
$status = "1";
$text = match($status) {
1 => "Potrivire cu întreg",
default => "Nicio potrivire",
};
echo $text;
?>