PHP

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.