Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe PHP

Jaką wartość wyświetli przedstawiony kod PHP?

$liczba = 10;
switch ($liczba) {
    case 10: $liczba++;
    case 20: $liczba++; break;
    default: $liczba = 0;
}
echo $liczba;
A. 0
Źle. break w przypadku dla 20 zatrzymuje wykonanie przed default.
B. 11
Źle. Po pierwszym $liczba++ brakuje break, więc wykonuje się też kolejny przypadek.
C. 12
Dobrze. Brak break sprawia, że zmienna rośnie dwa razy, z 10 do 12.
D. 10
Źle. Pasujący case 10 zmienia wartość zmiennej.

switch porównuje wartość tylko raz, na początku, i skacze do pasującej etykiety case. Dla 10 wykonuje się $liczba++ i zmienna ma wartość 11. W tym miejscu nie ma jednak break, więc wykonanie przechodzi dalej do instrukcji kolejnego case, bez ponownego sprawdzania warunku. Drugie $liczba++ daje 12, a dopiero break kończy instrukcję i echo wypisuje 12.

To zjawisko nazywa się przechodzeniem do kolejnego przypadku (ang. fall-through). Świadomie używa się go, gdy kilka wartości ma wspólny kod, np. case 10: case 20:. Zwykle jednak każdy case kończy się break.

Dlatego przy pisaniu własnego kodu nie należy zapominać o tej instrukcji.

Najczęstszy błąd to założenie, że switch wykona tylko instrukcje pierwszego pasującego case i zatrzyma się na 11. Tak działa if z elseif, ale w switch koniec przypadku wyznacza dopiero break. Bez niego wykonanie przechodzi do następnych instrukcji, choć 11 nie jest równe 20.

Wynik 0 pojawiłby się, gdyby wykonanie dotarło do default. Zatrzymuje je jednak break stojący w przypadku dla 20. Wynik 10 oznaczałby, że żadna instrukcja nie zmieniła zmiennej, a pasujący case 10 na pewno się wykonał.

Wartość rośnie więc dwa razy i kod wyświetla 12. Przy analizie każdego switch warto szukać miejsc, w których brakuje break.

Najpewniej jest prześledzić kod linijka po linijce i zapisywać wartość zmiennej po każdej instrukcji, zamiast zakładać, że wykona się tylko jeden przypadek.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.