|
Struktury
kontrolne |
|
|
|
|
Instrukcje warunkowe
Instrukcje warunkowe są podstawą każdego języka programowania. Używa się jej
do wykonania pewnej instrukcji (lub bloku instrukcji), ale tylko w pewnych
okolicznościach - zostanie spełniony określony warunek (lub cały zestaw
warunków). Składnia instrukcji warunkowej jest następująca:
<?
if(wyrażenie_warunkowe)
instrukcja wykonywana jeśli spełniony zostanie warunek
else if(inne_wyrażenie_warunkowe)
instrukcja wykonywana jeśli spełniony zostanie drugi warunek, a pierwszy nie
else
instrukcja wykonywana jeśli nie zostanie spełniony żaden z warunków
?>
Wyrażeniem warunkowym jest w zasadzie dowolne wyrażenie, ponieważ za warunek
uznawane jest wszystko co zwraca wartość, czyli wszystkie zmienne, wyrażenia
logiczne, funkcje itp. Za spełniony warunek uznawana jest wartość większa od
zera.
<?
$a = 2;
$b = 5;
$c = 1;
if($a > $b)
echo "$a jest większe od $b";
else if($b > $c)
echo "$b jest większe od $c";
else
echo "$c jest większe od $a i $b";
if($a)
echo "Zmienna $a ma wartość większą od zera";
?>
Jeśli chcemy, aby po sprawdzeniu warunku wykonane zostało nie jedno, ale
kilka poleceń, to te polecenia trzeba ująć w nawiasy klamrowe. Bez tego
warunkiem objęta by była tylko jedna instrukcja po instrukcji if.
Instrukcje mogą być zagnieżdżane wewnątrz siebie:
<?
$a = 6;
$b = 5;
$c = 1;
if($a > $b){
echo "$a jest większe od $b";
if($a > $c)
echo " i od $c"; /* Powinien zostać wyświetlony napis "6 jest większe od 5 i
od 1" */
}
?>
Oczywiście możliwe jest korzystanie z warunków bardziej złożonych niż
pojedyńcze porównanie wielkości zmiennych - do łączenia warunków niezbędne
jest wykorzystanie operatorów logicznych opisanych w poprzednim rozdziale.
Operator logiczny OR (lub) ma większy priorytet niż operator AND (i), więc
aby sprawdzić jakiś warunek gdzie konieczna jest inna kolejność, niezbędne
jest użycie nawiasów grupujących warunki. Na przykład chcemy aby jakaś
instrukcja była wykonana jeśli zmienna $a jest większa od $b lub $c, i
zmienna $d była równa $e. Jeśli chcielibyśmy zapisać to bez żadnych nawiasów:
$a > $b || $a > $c && $d == $e to efekt byłby zupełnie inny od zamierzonego:
instrukcja była by wykonana jeśli $a było by większe od $b, lub jeśli $a
było by większe od $a i $d było by równe $e. Poprawna konstrukcja to ($a >
$b || $a > $c) && $d == $e.
<?
$a = 6;
$b = 5;
$c = 7;
$d = 6;
$e = 6;
if( ($a > $b || $a > $c) && // Nawiasy klamrowe nie są potrzebne - to
$d == $e ) // 2 linie ale jedna instrukcja
echo 'Zmienna $a jest większa od $b a zmienna $d jest równa $e, '.
'więc ten tekst pokaże się.'; // Taka konstrukcja jest dozwolona
?>
Pętla for
<?
for( inicjalizacja zmiennych ; sprawdzenie warunku ; modyfikacja zmiennych)
{
blok wyrażeń
}
?>
Jak widać, w tej pętli podaje się 3 wyrażenia jako parametry: inicjalizację
zmiennych, czyli ustawienie początkowych wartości dla zmiennych
kontrolujących pętlę, sprawdzenie warunku, czyli wyrażenie logiczne
kontrolujące pętlę - pętla będzie wykonywana dopóki ten warunek jest
prawdziwy, oraz modyfikację zmiennych kontrolujących pętlę - bez tego pętla
będzie wykonywała się w nieskończoność (oczywiście wartość tych zmiennych
można modyfikować wewnątrz pętli, ale jest to niezalecane). Przykład
najprostszej pętli, która wypisze cyfry od 1 do 10:
<?
for( $x = 1; $x <= 10; $x++ )
echo $x."<br>";
?>
Pętla while
Innym rodzajem pętli jest pętla WHILE. Jest ona wykorzystywana w sytuacjach,
kiedy niezbędne jest wykonywanie jakiejś operacji dopóki nie zostanie
spełniony warunek. Pętla while ma następującą składnię:
<?
while( warunek ){
...
instrukcje
...
}
?>
Można na przykład za pomocą tej pętli zapisać odpowiednik pętli FOR z
poprzedniego przykładu:
<?
$x=1;
while($x <= 10){
echo $x."<br>";
$x++;
}
?>
Pętla do...while
Odmianą pętli while jest pętla do...while. Od zwykłej pętli while różni się
ona tym, że polecenia zawarte w pętli będą przynajmniej raz wykonane - w
przypadku pętli while tak być nie musi, to znaczy jeśli za pierwszym razem
warunek nie zostanie spełniony to polecenia z pętli nigdy nie zostaną
wykonane. W przypadku tej pętli zostano one wykonane przynajmniej ten
pierwszy raz. Składnia:
<?
do{
...
instrukcje
...
}while( warunek );
?>
Przerywanie wykonań pętli
Czasem zachodzi potrzeba przerwania danej iteracji (powtórzenia) pętli i
przejścia do następnej iteracji. Z pomocą wtedy przychodzi instrukcja
continue. Wystarczy wstawić ją w odpowiednie miejsce wewnątrz pętli.
Przykład (niezbyt wyszukany):
<?
for($x = 1; $x<=100; $x++) {
if($x % 2 != 0)
continue;
echo $x." ";
}
?>
Po uruchomieniu powyższego przykładu powinniśmy zobaczyć liczby parzyste od
1 do 100. Oczywiścje można to zapisać łatwiej, ale chodziło o przykład:
<?
for($x = 1; $x<=100; $x++) {
if($x%2==0)
echo $x." ";
}
?>
Istenie też polecenie, które powoduje całkowite wyjście z pętli - nie tylko
z bieżącej iteracji. To polecenie to brake. Załóżmy, że zmienna $nazwa to
zmienna podana z formularza:
<?
for($x = 0; $x<10; $x++) {
if($x%2==0)
echo $x." ";
if($nazwa == "Test1")
break;
}
?>
Składnia switch
Składnia switch jest instrukcją warunkową, ale jedną zmienną można porównać
nie z jedną wartością, ale z kilkoma. Niestety nie można konstruować
złożonych warunków - możliwe jest tylko proste porównywanie (równoważne
instrukcji: if($zmienna=="wartość") instrukcja). Składnia:
<?
switch($zmienna){
case 'wartość1':
...
instrukcje
...
break;
case 'wartość2':
...
instrukcje
...
break;
default:
...
instrukcje
...
}
?>
Instrukcje zawarte po identyfikatorze "default" wykonywane są jeśli zmienna
$zmienna nie przyjęła wartości "wartość1" i "wartość2" (dla tego przykładu).
Aby móc dobrze wykorzystać tą składnię warto jest dokładnie wiedzieć jak ona
działa. Instrukcje są przetwarzane linia po linii. Parser przechodzi do
pierwszej linii "case" pasującej do zmiennej. Następnie przetwarzane są
wszystkie linie wewnątrz nawiasów klamrowych aż do napotkania instrukcji
break - nawet jeśli po drodze znajdują się instrukcje "case". Przykład:
<?
$i = 3;
switch($i){
case 0:
case 1:
case 2:
case 3:
echo "Zmienna $i jest mniejsza bądź równa od trzech\n";
break;
case 4:
echo "Zmienna $i jest równa cztery\n";
break;
default:
echo "Zmienna $i jest większa od czterech\n";
}
?>
|
|
|
|