Instrukcje switch i match
Używanie switch i match z PHP 8 do obsługi logiki wielogałęziowej.
Instrukcje switch i match to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
switch a łańcuchy if
Gdy istnieje wiele gałęzi zależnych od wartości jednej zmiennej, switch jest czytelniejszy niż długi łańcuch if/elseif.
PHP 8 wprowadził match jako nowoczesną, ścisłą alternatywę.
Podstawy instrukcji switch
Switch oblicza swoje wyrażenie raz i wykonuje blok pasującego przypadku:
<?php
$day = 'Monday';
switch ($day) {
case 'Monday':
echo 'Start of work week';
break;
case 'Friday':
echo 'Almost weekend';
break;
default:
echo 'Midweek';
}Zachowanie przechodzenia do kolejnego przypadku
Bez break wykonanie przechodzi dalej do następnego przypadku — jest to celowy sposób grupowania przypadków:
<?php
$status = 2;
switch ($status) {
case 1:
case 2:
case 3:
echo 'In progress'; // runs for 1, 2, or 3
break;
case 4:
echo 'Done';
break;
}Switch używa luźnego porównania
Switch wewnętrznie używa == (luźnego porównania) — może to prowadzić do zaskakujących dopasowań:
<?php
$val = 0;
switch ($val) {
case 'foo': // 0 == 'foo' in PHP 7!
echo 'match foo';
break;
case 0:
echo 'match zero'; // PHP 8 fixes this
break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)Wyrażenie match w PHP 8
match działa podobnie jak switch, ale używa ścisłego porównania, zwraca wartość i nie wymaga break:
<?php
$status = 'active';
$label = match($status) {
'active' => 'Currently active',
'inactive' => 'Not active',
'pending' => 'Awaiting activation',
default => 'Unknown status',
};
echo $label; // Currently activematch bez wyjątku przy braku dopasowania
Jeśli w match nie pasuje żadne ramię i nie ma default, zgłaszany jest wyjątek UnhandledMatchError:
<?php
$code = 99;
try {
$result = match($code) {
200 => 'OK',
404 => 'Not Found',
500 => 'Server Error',
// no default!
};
} catch (\UnhandledMatchError $e) {
echo 'Unhandled match value: ' . $code;
}match z wieloma warunkami
Pojedyncze ramię match może zawierać wiele wartości oddzielonych przecinkami:
<?php
$lang = 'tr';
$region = match($lang) {
'en', 'en-US', 'en-GB' => 'English',
'tr', 'az' => 'Turkic',
'fr', 'be', 'ca' => 'French-speaking',
default => 'Other',
};
echo $region; // Turkicmatch ze złożonymi wyrażeniami
Ramiona match mogą używać dowolnych wyrażeń po prawej stronie:
<?php
$score = 85;
$grade = match(true) {
$score >= 90 => 'A',
$score >= 80 => 'B', // matches
$score >= 70 => 'C',
default => 'F',
};
echo $grade; // Breturn z match
Ponieważ match jest wyrażeniem, można go używać wszędzie tam, gdzie oczekiwana jest wartość:
<?php
function getHttpMessage(int $code): string {
return match($code) {
200 => 'OK',
201 => 'Created',
400 => 'Bad Request',
401 => 'Unauthorized',
404 => 'Not Found',
default => 'Unknown',
};
}
echo getHttpMessage(404); // Not Foundswitch w kontekście return
Switch można używać wewnątrz funkcji do zwracania różnych wartości, ale match jest czytelniejszy:
<?php
function describe(int $n): string {
switch (true) {
case $n < 0: return 'negative';
case $n === 0: return 'zero';
default: return 'positive';
}
}
echo describe(-5); // negative
echo describe(0); // zero
echo describe(7); // positiveKiedy używać switch, a kiedy match
Wskazówki dotyczące wyboru:
- Używaj
match, gdy potrzebujesz ścisłego porównania i zwracanej wartości (PHP 8+) - Używaj
switchdo grupowania przypadków z przechodzeniem do kolejnych gałęzi albo podczas obsługi PHP 7 - Obie konstrukcje są czytelniejsze niż długie łańcuchy if/elseif przy rozgałęzianiu zależnym od wielu wartości
Szybkie sprawdzenie
Co dzieje się w wyrażeniu match, gdy żadne ramię nie pasuje i nie ma wartości default?
Podsumowanie: switch i match
Najważniejsze różnice:
switch— luźne porównanie, przechodzenie do kolejnych przypadków, PHP 4+match— ścisłe porównanie, brak przechodzenia do kolejnych przypadków, zwracanie wartości, PHP 8+- Match zgłasza
UnhandledMatchError, gdy nie ma wartości default - Ramiona match przyjmują wiele wartości oddzielonych przecinkami
Dalej: pętle for i while.
Często zadawane pytania
Czy lekcja „Instrukcje switch i match” jest bezpłatna?
Tak — pełny tekst „Instrukcje switch i match” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Instrukcje switch i match”?
Używanie switch i match z PHP 8 do obsługi logiki wielogałęziowej. Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Instrukcje switch i match”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- if, elseif i else
- Instrukcje switch i match
- Pętle for i while
- foreach i sterowanie pętlą