PHP - Struktury kontrolne
Kurs PHP
Instrukcje warunkowe
Pętla for
Pętla while
Pętla do...while
Przerywanie wykonań pętli
Składnia 'switch'
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 warunekelse if(inne_wyrażenie_warunkowe) instrukcja wykonywana jeśli spełniony zostanie drugi warunek, a pierwszy nieelse 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
Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą
przychodzi jedna z najczęściej używanych składni w większości języków programowania, czyli
pętla FOR. Ogólny zapis wygląda tak:
<?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";}?>
© Leszek Krupiński leszek@x-php.net
Najnowszą wersję kursu można znaleźć pod adresem
http://www.leon.w-wa.pl/texts/kurs/
Wyszukiwarka
Podobne podstrony:
control structures continuefunction xml parse into structstructurestructarm ?ft radix4 instance q15Metal Hollow Sphere Structures characteristicsstructarm biquad ?sd ?1 inst q15AutoCAD Structural Detailing Stal Przykłady 2009structarm pid instance q15structarm lms norm instance ?2AutoCAD Structural Detailing Żelbet Przykłady 2009Collagens structure, function, and biosynthesisDesign Guide 17 High Strength Bolts A Primer for Structural Engineerstech view inode and metadata structure ext3structarm ?ft radix4 instance ?2więcej podobnych podstron