PHP: Instrukcje warunkowe
Instrukcja warunkowa jeżeli – if
Podstawowa budowa instrukcji warunkowej wygląda następująco:
if(warunek) instrukcja;
Jeżeli warunek zostanie spełniony, wykonaj instrukcję. Warunek spełniony to taki, dla którego wartość logiczna jest równa true (liczbowo = 1), czyli jest prawdziwa. Przykładowo jeśli wartość zmiennej $a w poniższym przykładzie będzie liczbą większą niż 0 na ekran wypisze się stosowny komunikat:
if($a>0) echo "Wartość zmiennej a jest większa od zera.";
Jeśli nie będzie liczbą większa od 0 instrukcja ta nie wykona się w ogóle.
if(warunek){ instrukcje; }
Oczywiście po spełnieniu warunku można wykonać więcej niż jedną instrukcję. Wówczas wszystkie elementy, które mają się wykonać w przypadku prawdziwości warunku zamykamy w blok instrukcji pomiędzy klamrami {}.
if($a>0){ echo "a dodatnie"; $b++; $c--; }
Jeśli chcemy wykonać jakieś instrukcje w przypadku spełnienia warunku, a w przeciwnym razie inne, wykorzystamy ELSE.
if(warunek){ instrukcje; }else{ instrukcje; }
Przykładowo:
if($a>0){ echo "a większe od 0"; }else{ echo "a nie jest większe od 0"; }
Możemy również skorzystać z większej ilości warunków:
if(warunek){ instrukcje; }elseif(warunek){ instrukcje; }else{ instrukcje; }
np.:
if($imie == "Jaś") echo "Cześć Jasiu."; elseif($imie == "Staś") echo "Cześć Stasiu"; else echo "Jak masz na imię?";
Warto zwrócić uwagę, że w instrukcji warunkowej porównując wartość naszej zmiennej z jakąś konkretną wartością, bądź inną zmienną wykorzystujemy operator porównania ==, a nie przypisania =. Użycie pojedynczego znaku równości jest jednym z częstszych błędów, nie tylko początkujących programistów 😉 Przypisanie, a więc nadanie zmiennej wartości, jest logicznie zawsze prawdziwe. Stąd nasz warunek zapisany w taki właśnie sposób ( np. if($a = 5) ) będzie zawsze prawdziwe.
Zajmijmy się na chwilę tematem parzystości:
if($a % 2 == 0) echo "Wartość zmiennej a jest parzysta"; else echo "Wartość zmiennej a jest nieparzysta";
Nasz warunek sprawdza, czy reszta z dzielenia (%) a przez 2 jest równy 0. Jeśli dowolną liczbę różną od 0 podzielimy przez 2 możemy otrzymać dwie różne reszty z dzielenia: 0 w przypadku, gdy nasza liczba była parzysta, bądź 1 dla nieparzystej. Zatem nasz warunek sprawdza czy $a jest parzyste.
Możemy również wykorzystać zapis bez operatora porównania:
if($a % 2) echo "Wartość zmiennej a jest ...";
Jaka Twoim zdaniem powinna być zawartość zdania w miejscu wielokropka?
Warunek spełniony zostaje tylko w przypadku kiedy jest prawdą. Oznacza to, że instrukcje wykonają się tylko wtedy, kiedy warunek ma logiczną wartość 1. Kiedy uzyskamy wartość 1 dla wyrażenia $a % 2 ? Kiedy reszta z dzielenia będzie 1, a więc w przypadku liczby nieparzystej. Zatem prawidłowo zapisana instrukcja przy powyższym warunku wygląda następująco:
if($a % 2) echo "Wartość zmiennej a jest nieparzysta";
Wróćmy na chwilę do pojęć pojedynczych instrukcji i bloku instrukcji po warunku.
Na czym polega różnica w działaniu obu poniższych instrukcji?
if($a) $b++; $c--; if($a){$b++; $c--;}
W pierwszym przypadku nie mamy do czynienia z blokiem instrukcji, zatem po spełnieniu warunku wykona się jedynie inkrementacja $b++. Dekrementacja $c– wykona się natomiast zawsze, niezależnie od tego, czy warunek jest spełniony, czy też nie.
Która z poniższych instrukcji zostanie wykonana? Co zostanie wypisane na ekran?
if(1) echo "Prawda"; if(0) echo "Fałsz";
Oczywiście na ekranie pojawi się napis Prawda, gdyż wykona się jedynie instrukcja, której wartość logiczna to true, czyli 1.
Warunek w instrukcji warunkowej może składać się więcej niż z jednego warunku 🙂 Oznacza to, że możemy jednocześnie zapytać czy $a jest większe od 3 i jednocześnie mniejsze od 5. Możemy również zadać inne pytanie, a mianowicie czy $a jest mniejsze od 3 lub większe od 5.
Do zapisu podobnych pytań stosujemy następujące symbole:
if(1 || 0) echo "lub"; if(1 && 0) echo "i";
Lub, symbol ||, oznacza, że warunek jest spełniony w przypadku, kiedy lewe albo prawe zapytanie jest prawdą.
I, symbol &&, oznacza, że warunek jest spełniony w przypadku, kiedy oba zapytania są prawdą.
Co zatem przy użyciu poniższych instrukcji wypisze się na ekran dla x = 1, y =3?
if($x>0 && $y<0) echo "X większe od zera i Y mniejsze od zera"; if($x>0 || $y<0) echo "X większe od zera lub Y mniejsze od zera";
Dla wartości $x = 1, $y = 3 prawdziwy jest tylko warunek $x > 0 lub $y <0, zatem na ekranie pojawi się tekst: X większe od zera lub Y mniejsze od zera.
Instrukcja wyboru – switch
Do omówienia pozostaje nam jeszcze odrobinę inna instrukcja – instrukcja wyboru, wielokrotnego warunku.
Budowa instrukcji wyboru:
switch(liczba_całkowita){ case wartość1: instrukcje; break; case wartość2: instrukcje; break; ... case default; instrukcje; break; }
Przeanalizujmy poniższy przykład:
switch($k){ case 1: echo "Jeden"; $x++; break; case 2: echo "Dwa"; $y++; break; default: echo "Domyślnie"; $x++; $y++; break; }
Sprawdzamy wartość zmiennej $k. $k musi być liczbą całkowitą. Case, to kolejne opcje, bloki instrukcji wykonywane w przypadku kiedy zmienna $k będzie miała daną konkretną wartość. W naszym przykładzie, jeśli $k będzie miało wartość 1, to wypiszemy na ekran Jeden oraz dokonamy inkrementacji zmiennej $x. Break kończy dany blok instrukcji. Default, jest to wartość domyślna – blok instrukcji, który wykona się w przypadku, kiedy nasza zmienna $k nie będzie miała, żadnych z wcześniejszych wartości zawartych w kolejnych opcjach case.