PHP8 nowa instrukcja warunkowa match  autor:  Tomplus 
 Środa 05 Sierpień 2020  
					
					 Od wersji PHP 8 otrzymamy nową instrukcję warunkową 
match. Będzie to świetna funkcja, która będzie częstszym wyborem do korzystania niż 
switch.  Spójrzmy na różnice.
Klasyczna instrukcja 
switch prezentuje się tak:
- switch ($statusCode) { 
-     case 200: 
-     case 300: 
-         $message = null; 
-         break; 
-     case 400: 
-         $message = 'not found'; 
-         break; 
-     case 500: 
-         $message = 'server error'; 
-         break; 
-     default: 
-         $message = 'unknown status code'; 
-         break; 
- } 
Nowa instrukcja 
matchbędzie można użyć w ten sposób:
- $message = match ($statusCode) { 
-     200, 300 => null, 
-     400 => 'not found', 
-     500 => 'server error', 
-     default => 'unknown status code', 
- }; 
Podsumowując 
match:
- instrukcja jest znacznie krótsza niż 
switch;
- nie wymaga używania 
break;
- może łączyć różne warunki, tylko używając jako separator przecinka;
- wartość jest przypisywana do zmiennej, nie trzeba przypisywać wartości do nich wielokrotnie;
- reszta zalet poniżej...
### Brak wymuszania typuInstrukcja 
match będzie oparta na ścisłej kontroli wartości (
strict). To tak, jakby używać === zamiast == w instrukcjach 
IF. Czasem może to być uciążliwe, ale stosowanie ścisłej kontroli to przyszłość języka PHP.
- $statusCode = '200'; 
-   
- $message = match ($statusCode) { 
-     200 => null, 
-     default => 'unknown status code', 
- }; 
-   
- // $message = 'unknown status code' 
Brak wartości w instrukcji match zwraca błądJeżeli instrikcja 
match będzie bez wartości domyślnej lub wartość będzie nieustawiona, PHP zgłosi wyjątek 
UnhandledMatchError. Tutaj też jest większy rygor, ale zapobiegnie to przed niezauważeniem błędów podczas pisania kodu.
- $statusCode = 400; 
-   
- $message = match ($statusCode) { 
-     200 => 'perfect', 
- }; 
-   
- // UnhandledMatchError 
### Łączenie warunkówJuż powyższych przykładach można było zobaczyć połączone warunki, oddzielone jedynie przecinkami, coś podobnego jak przy 
switch:
- switch ($statusCode) { 
-     case 200: 
-     case 300: 
-     case 400: 
-         $message = 'combined expressions'; 
-         break; 
-   } 
Przy 
match okazuje się to prostsze, z mniejszą ilością pisania i mniej możliwości na błędy.
- $message = match ($statusCode) { 
-     200, 300, 301, 302 => 'combined expressions', 
- }; 
###  Złożone warunki i wydajnośćMożliwość użycia wyrażeń regularnych podczas dopasowania może być bardzo użyteczny przy wielu podobnych wartościach warunkowych, ale należy pamiętać że płynie to na spadek wydajności aplikacji, jednakże użyteczność tego wzorca dodatkowo pozytywnie odbije się na częstotliwości użycia nowej instrukcji.
- $message = [ 
-     $this->matchesRegex($line) => 'match A', 
-     $this->matchesOtherRegex($line) => 'match B', 
- ][$line] ?? 'no match'; 
### Rzucanie wyjątkówRzucanie wyjątków 
throw w PHP 8, wtedy gdy potrzebujesz tak jak na przykładzie poniżej:
- $message = match ($statusCode) { 
-     200 => null, 
-     500 => throw new ServerError(), 
-     default => 'unknown status code', 
- }; 
### Dopasowanie wzorcówJedna z technik używana w innych językach programowania, umożliwiająca bardziej złożone dopasowywanie niż proste wartości. Coś jak wyrażenie regularne, ale o zmiennych zamiast treści. Jest to dopiero funkcja przyszłości która bo jest to na tyle złożony temat, że aby dobrze działała potrzeba poświęcić trochę więcej czasu nad nią.
### Na razie tylko wyrażenia jednowierszoweŁyżka dziegciu do miodu musi być, a tym jest że wyrażenia mogą być tylko jednowierszowe. Tworzenie całych bloków wyrażeń, tak jak w 
switch prawdopodobnie zostaną dodane w innej wersji PHP8, ale nie ma na tą chwilę żadnych szczegółowych terminów.
Inspiracja artykułem: 
https://stitcher.io/blog/php-8-match-or-switch