switch
Instrukcja
switch
jest
podobna
do
serii
instrukcji
IF
z
warunkiem
na
to
samo
wyrażenie
.
W
wielu
przypadkach
istnieje
potrzeba
porównania
jednej
zmiennej
(
lub
wyrażenia
)
z
wieloma
różnymi
wartościami
i
wykonania
różnych
fragmentów
kodu
,
w
zależności
od
wyniku
porównania
tej
zmiennej
z
różnymi
wartościami
.
Do
tego
właśnie
służy
instrukcja
switch
.
Poniżej
znajdują
się
dwa
przykłady
wykonujące
dokładnie
to
samo
,
przy
czym
jeden
z
nich
wykorzystuje
serię
instrukcji
if
,
zaś
drugi
używa
instrukcji
switch
:
Ważne
jest
by
zrozumieć
,
jak
działa
instrukcja
switch
,
żeby
uniknąć
błędów
.
Instrukcja
switch
jest
wykonywana
linia
po
linii
(
dokładnie
wyrażenie
po
wyrażeniu
)
.
Na
początku
żaden
fragment
kodu
nie
jest
wykonywany
.
Dopiero
kiedy
zostaje
odnalezione
wyrażenie
case
,
którego
wartość
odpowiada
wyrażeniu
przy
instrukcji
switch
,
PHP
rozpoczyna
wykonywanie
kodu
od
miejsca
,
gdzie
znajduje
się
ta
instrukcja
case
.
PHP
wykonuje
instrukcje
aż
do
momentu
kiedy
blok
switch
się
skończy
,
lub
do
momentu
znalezienia
instrukcji
break
.
Jeśli
nie
napiszesz
instrukcji
break
na
końcu
instrukcji
w
danym
wyrażeniu
case
to
PHP
będzie
wykonywać
dalej
instrukcje
z
następnego
wyrażenia
case
.
Na
przykład
:
W
tym
przypadku
,
jeśli
$i
jest
równe
0
,
to
PHP
wykona
wszystkie
trzy
instrukcje
print
.
Jeśli
natomiast
będzie
równe
jeden
-
wtedy
tylko
dwie
ostatnie
.
Zachowanie
zgodne
z
oczekiwaniami
będzie
wtedy
,
kiedy
$i
będzie
równe
2
-
wtedy
wykonane
będzie
tylko
ostatnia
instrukcja
print
.
Trzeba
zatem
pamiętać
o
umieszczaniu
na
końcu
instrukcji
break
,
chyba
że
planuje
się
wykorzystać
jakieś
specjalne
możliwości
instrukcji
switch
,
o
czym
dalej
.
W
instrukcji
switch
wartość
wyrażenia
jest
obliczana
tylko
raz
,
a
następnie
jest
porównywana
z
każdym
z
wyrażeń
przy
etykiecie
case
.
Natomiast
w
instrukcji
elseif
wartość
wyrażenia
jest
obliczana
ponownie
.
Dlatego
,
jeśli
twoje
wyrażenie
jest
bardziej
skomplikowane
od
zwykłego
porównania
,
lub
znajduje
się
w
zwartej
pętli
(
tight
loop
)
,
switch
może
być
szybszy
.
Po
etykiecie
case
mogą
nie
występować
żadne
instrukcje
,
co
oznacza
po
prostu
,
że
sterowanie
zostaje
przekazane
do
następnej
etykiety
case
.
Specjalną
etykietą
jest
etykieta
warunku
domyślnego
-
default
.
Etykieta
ta
dotyczy
sytuacji
,
w
której
wyrażenie
nie
pasowało
do
wartości
przy
innych
etykietach
typu
case
.
W
instrukcji
switch
ta
etykieta
powinna
być
ostatnia
z
listy
.
Na
przykład
:
Etykieta
case
może
zawierać
dowolną
wartość
typu
prostego
,
czyli
liczbę
całkowitą
,
zmiennoprzecinkową
lub
łańcuch
znaków
.
Tablice
lub
obiekty
nie
mogą
być
użyte
,
o
ile
nie
zostaną
przekształcone
w
jakiś
typ
prosty
.
Instrukcja
switch
obsługuje
też
składnię
alternatywną
.
Więcej
informacji
na
ten
temat
w
rozdziale
Składnia
alternatywna
w
strukturach
kontrolnych
.