Rozdział 3. ♦ Instrukcje sterujące i funkcje 75
Szczególną uwagę należy zwrócić na instrukcje break, która przerywa wykonywanie całego bloku case. Jej przypadkowe pominięcie może doprowadzić do nieoczekiwanych wyników i błędów w programie. Aby przekonać się, w jaki sposób działa instrukcja switch bez instrukcji break, zmodyfikujmy skrypt z listingu 3.7, usuwając z niego wszystkie instrukcje break. Powstanie wtedy kod widoczny na listingu 3.8.
Listing 3.8. Skrypt po usunięciu instrukcji break
<html>
<head>
<title>Przykladowa strona</title>
</head>
<body>
<?php
tliczbal - 2;
$liczba2 = 1;
switch($liczbal * 5 / ($liczba2 + 1)){ case 5 :
echo ("liczba = 5"): case 15 :
echo("liczba = 15"); default :
echoCZmienna liczba nie jest równa ani 5. ani 15.“);
}
</body>
</html>
Wynik jego działania jest przedstawiony na rysunku 3.2. Ten program nie wykonuje swojego zadania, tak jak byśmy się spodziewali. Jak zatem działa przedstawiony kod? Otóż jeśli w którymś z bloków (przypadków) case zostanie wykryta zgodność z wyrażeniem występującym za switch, zostaną wykonane wszystkie dalsze instrukcje, aż do napotkania instrukcji break lub dotarcia do końca instrukcji switch.
Plik Edycja widok P |
rzejdź Zakładki [iarzędzia Pomoę' | |||
;i | Q http://localhosUindex.php |
żJ © |
a W | ||
^ Rozpocznij |
przygód... |
,J Aktualności |
Rysunek 3.2. Ilustracja błędu polegającego na pominięciu instrukcji break
W kodzie z listingu 3.8 zgodność jest stwierdzona już w pierwszym przypadku (case 5), zostaje zatem wykonana instrukcja echo("liczba = 5"). Ponieważ nie występuje po niej * break, w dalszej kolejności zostaje wykonana instrukcja echo("liczba = 15") (nie ma znaczenia, że należy ona do przypadku case 15!). Po tej instrukcji również nie ma break, zatem zostanie wykonana instrukcja występująca po default, czyli echoCZmienna liczba nie jest równa ani 5. ani 15."). Stąd właśnie takie działanie tego skryptu.