0Pricing
PHP Academy · Lekcja

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 active

match 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; // Turkic

match 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; // B

return 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 Found

switch 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);   // positive

Kiedy 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 switch do 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

  1. if, elseif i else
  2. Instrukcje switch i match
  3. Pętle for i while
  4. foreach i sterowanie pętlą
← Powrót do PHP Academy