Kursy

Instrukcja warunkowa if

Instrukacja warunkowa if

Często będziemy chcieli wykonać jakieś działanie, ale tylko wtedy, gdy zostanie spełniony pewien warunek. W tym celu posłużymy się instrukcją if. Ma ona następującą postać:

if (warunek_1) {
blok instrukcji 1
} elseif (warunek_2) {
blok instrukcji 2
} elseif (warunek_3) {
blok instrukcji 3
........
} else {
blok instrukcji n
}

lub forma uproszczona:

if (warunek) {
blok instrukcji
}


Działanie tej instrukcji nie zbyt skomplikowane. Najpierw jest sprawdzana wartość warunku_1. Jeżeli jest on prawdziwy (czyli ma wartość TRUE) wykonywany jest blok instrukcji 1. Jeśli tak nie jest (czyli warunek_1 ma wartość FALSE) cały ten blok jest pomijany i sprawdzane są kolejne warunki i jeśli jeden z nich jest spełniony to wykonywany jest odpowiedni blok instrukcji. Gdy zostanie odnaleziona instrukcja, której warunek będzie posiadał wartość TRUE, to pozostałe instrukcje zostaną pominięte. Jeżeli żaden z warunków nie jest spełniony to wykonywany jest blok instrukcji w warunku else ( o ile ten istnieje).

Jeżeli zdecydujemy się na formę uproszczoną to zostanie sprawdzony warunek. Jeśli jest spełniony (wartość TRUE) to zostanie wykonany blok instrukcji. W przeciwnym razie (warunek posiada wartość FALSE) program przechodzi do kolejnych instrukcji.

Spójrzmy jak to działa w praktyce:

if ($i>0) {
print (" $i jest większa od 0");
}
elseif ($i<0) {
print ("$i jest większa od 0");
}
else {
print ("$i jest równe 0");
}



W powyższym przykładzie mamy pewna zmienną $i. Najpierw program sprawdza pierwszy warunek, w naszym przypadku, czy $i jest większa od 0. Jeśli tak, to za pomocą funkcji print zostanie wyświetlony napis informujący nas o tym fakcie. Jeśli warunek $i>0 przyjmie wartość FALSE, czyli $i nie jest większy od 0, to program przejdzie do wykonywania kolejnych instrukcji elseif. W naszym przykładzie sprawdzi, czy zmienna $i jest mniejsza od 0. Gdy będzie to prawdą zostanie wyświetlony odpowiedni napis (patrz funkcja print). Gdyby się okazało, że warunek i tym razem nie został spełniony, to pozostała już tylko jedna możliwość (zmienna $i jest równa 0). Aby w tym wypadku wyświetlić odpowiedni komunikat użyliśmy klauzuli else. W ten sposób mamy pewność, że przynajmniej jeden warunek będzie spełniony.

klauzula elseif oraz else

Klauzuli elseif oraz else stosujemy w celu sprawdzenia wszystkich możliwych sytuacji. Zaczynamy od zapisania pierwszego warunku w instrukcji if, następnie sprawdzamy wszystkie pozostałe warunki umieszczając każdy z nich w klauzuli elseif. Na końcu umieszczamy klauzulę else i w ten sposób jesteśmy przygotowani na wszystkie możliwe sytuacje.

Sprawdźmy jak to działa w skrypcie, który będzie wyświetlał nazwę dnia tygodnia w języku polskim. Posłużymy się tu oprócz instrukcji if funkcją date( ). W naszym przypadku funkcja ta będzie zwracała bieżący dzień tygodnia (w języku angielskim).

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Dzień tygodnia<TITLE>
</HEAD>
<BODY>

<?
$dzien=date("l"); //Zmiennej $dzien przypisaliśmy za pomocą funkcji date aktualny dzień tygodnia

if ($dzien=="Monday") {
print ("Dzisiaj jest poniedziałek");
} elseif ($dzien=="Tuesday") {
print ("Dzisiaj jest wtorek");
} elseif ($dzien=="Wednesday") {
print ("Dzisiaj jest środa");
} elseif ($dzien=="Thursday") {
print ("Dzisiaj jest czwartek");
} elseif ($dzien=="Friday") {
print ("Dzisiaj jest piątek");
} elseif ($dzien=="Saturday") {
print ("Dzisiaj jest sobota");
} else {
print ("Dzisiaj jest niedziela");
}

?>

</BODY>
</HTML>



W naszym skrypcie zmienna $dzien przechowuje nazwę aktualnego dnia tygodnia (która przypisaliśmy za pomocą funkcji date("l") ). Instrukcja if sprawdza po kolei wszystkie możliwe warunki. Jeśli, któryś z nich będzie miał wartość TRUE, za pomocą funkcji print wyświetli się odpowiedni komunikat "Dzisiaj jest .....".

Warto w tym miejscu jeszcze raz zwrócić uwagę na operator == i jego różnicę pomiędzy operatorem przypisania =. Gdybysly zastosowali operator przypisania = , czyli np.: $dzien="Saturday" oznaczałoby to, że zmiennej $dzien przypisujemy wartość "Saturday", a nie sprawdzamy tylko czy ta zmienna taką wartość posiada. Operator równości == sprawdza czy zmienna $dzien posiada daną wartość ( tu "Saturday"). Jeśli tak, to warunek zwraca wartość TRUE, jeśli nie to FALSE. O róznicy pomiędzy tymi dwoma operatorami wspominałem w rozdziale Operatory.

Operator trójargumentowy

PHP udostępnia także skróconą formę instrukcji if. Wykorzystuje ona znak ? - tzw. operator trójargumentowy. Ma ona postać:

warunek ? instrukcja_true : instrukcja_false



Na początku sprawdzany jest oczywiście warunek. Jeśli osiaga on wartośc TRUE, to zostanie spełniona instrukcja_true. W przeciwnym razie, gdy warunek ma wartość FALSE, spełniona zostanie instrukcja_false. Taka postać instrukcji odpowiada dokładnie poniższej:

if (warunek) {
instrukcja_true;
} else {
instrukcja_false;
}



Przykład działania skróconej formy instrukcji if przedstawiam poniżej.

Skrypt ten sprawdza, czy liczba przechowywana w zmiennej $a jest większa od liczby przechowywanej w zmiennej $b.

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Czy większa?<TITLE>
</HEAD>
<BODY>

<?
$a=3;
$b=8;
$a>$b ? print("Liczba $a jest większa od liczby $b") : print("Liczba $a nie jest większa od liczby $b");
?>

</BODY>
</HTML>



Oczywiście w rezultacie wykonania tego skryptu na ekranie pojawi się napis:

Liczba 3 nie jest większa od liczby 8



Ten sam rezultat moglibyśmy otrzymać tworząc skrypt:

<?
$a=3;
$b=8;
if ($a>$b) {
print("Liczba $a jest większa od liczby $b");
} else {
print("Liczba $a nie jest większa od liczby $b");
}
?>
 

Jednak używając operatora trójargumentowego możliwy (i poprawny) jest zapis:

<?
$a=3;
$b=8;
print($a>$b ? "Liczba $a jest większa od liczby $b" : "Liczba $a nie jest większa od liczby $b");
?>


Wynik będzie identyczny. Czegoś takiego nie da się zrobić przy wykorzystaniu instrukcji if.

Operator ? jest operatorem, a nie instrukcją. Co oznacza, że wyrażenie zostanie przetworzone jako całość. Jeśli instrukcja_true będzie miała być wykonana i jeśli instrukcją tą będzie funkcja, to zostanie ona wywołana. Jeśli instrukcją tą będzie jedynie literał, to zastąpi on wyrażenie ? Ze względu na fakt, że wyrażenie warunkowe daje w naszym przypadku wartość FALSE, to cała linia kodu zostanie zamieniona do następującej postaci:

print ("Liczba $a nie jest większa od liczby $b");



Pobierz przykład: if.zip