Warunki i pętle

Instrukcje warunkowe

Instrukcje warunkowe są podstawą każdego języka programowania. Używa się ich do wykonania pewnej instrukcji (lub bloku instrukcji), ale tylko w pewnych okolicznościach – jeśli 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 jest 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 polecenia te należy ująć w nawiasy klamrowe. Bez tego warunkiem objęta byłaby tylko jedna instrukcja po instrukcji if.

Instrukcje mogą być zagnieżdżanie 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ż pojedyncze porównanie wielkości zmiennych – do łączenia warunków niezbędne jest wykorzystanie operatorów logicznych opisanych pod tym adresem. Operator logiczny OR (lub) ma większy priorytet niż operator AND (i), więc aby sprawdzić 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łaby wykonana jeśli $a byłoby większe od $b, lub jeśli $a byłoby większe od $a i $d byłoby 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 
            $d == $e )           // to 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 danej 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 – 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ę trzy 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 liczby od 1 do 10:

<?
 
    for ($x = 1; $x <= 10; $x++)
        echo $x.'
';

?>

Pętla while

Innym rodzajem pętli jest pętla while. Wykorzystuje się ją w sytuacjach, kiedy niezbędne jest wykonywanie danej operacji dopóki nie zostanie spełniony warunek. Pętla while ma następującą składnię:

<?
 
    while (warunek) {
        ...
        instrukcje
        ...
    }

?>

Przykładowo można za pomocą tej pętli zapisać odpowiednik pętli for z poprzedniego przykładu:

<?

    $x=1;

    while ($x <= 10) {
        echo $x.'
';
        $x++;
    }

?>

Pętla do…while

Odmianą pętli while jest pętla do…while. Od zwykłej pętli while różni się tym, że polecenia w niej zawarte będą wykonane przynajmniej raz – 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 do…while zostaną one wykonane przynajmniej 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. Z pomocą przychodzi wtedy instrukcja continue. Wystarczy wstawić ją w odpowiednie miejsce wewnątrz pętli. Przykład:

<?
 
     for ($x = 1; $x <= 100; $x++) {
   
        if ($x % 2 != 0)
            continue;

        echo $x.' ';
    }

?>

Po uruchomieniu powyższego przykładu powinieneś zobaczyć liczby parzyste od 1 do 100. Oczywiście można to zapisać prościej:

<?
 
     for ($x = 1; $x <= 100; $x++) {

        if ($x%2==0)
            echo $x.' ';

    }

?>

Istenie także instrukcja, która powoduje całkowite wyjście z pętli – nie tylko z bieżącej iteracji. Ta instrukcja to break.

<?
 
    $tablica = array('a', 'b', 'c', 'd', 'e', 'f');
    $x = 0;

    while (true) {

        if ($tablica[$x] == 'd')
            break;

        $x++;

    }

?>

Dla potrzeb przykładu wprowadziliśmy najprostszą tablicę. Więcej informacji o tablicach znajdziesz pod tym adresem.

Składnia switch

switch jest instrukcją warunkową, w której 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ść”). 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 żadnej z wymienionych wyżej wartości. Aby dobrze wykorzystać tę składnię, warto 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 poniżej, 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 trzy\n";
            break;
        case 4:
            echo "Zmienna $i jest równa cztery\n";
            break;
        default:
            echo "Zmienna $i jest większa od czterech\n";
    }

?>
  • Czy artykuł był pomocny?
  • TAK   Nie
Tematy powiązane
Więcej informacji na forum dyskusyjnym:   Kliknij tutaj, aby przejść na forum.home.pl