Instrukcja if Z tą instrukcją zetknęliśmy się już przy okazji omawiania formularzy. Przypomnijmy jeszcze raz ten przykład:

<?php if(count($_GET) == 2) { echo 'Witaj, '.$_GET['imie'].' '.$_GET['nazwisko'].'!'; } else { echo 'Nieprawidłowa liczba parametrów!'; }

Instrukcja if pozwala na wykonanie części kodu tylko wtedy, kiedy spełniony jest określony warunek, oraz opcjonalne dodawanie alternatywnych instrukcji w razie jego fałszywości. Z if-a korzysta się niezwykle często, ponieważ niemal zawsze musimy sprawdzać, czy dane informacje są prawidłowe, czy funkcja poprawnie połączyła się z plikiem itd. Poniżej napiszemy skrypt, który będzie potrafił rozwiązywać równanie kwadratowe . Przypomnijmy, że ilość jego rozwiązań rzeczywistych zależy od wartości tzw. współczynnika Δ (). Jeżeli obliczony wynik (Δ) jest dodatni, istnieją dwa rozwiązania. Jeżeli ujemny - nie ma żadnych. Dla zera równanie daje jedno rozwiązanie (podwójne).

0) { // 5 echo 'Delta dodatnia. Dwa rozwiązania:'; echo ''.round((-$_GET['b']-sqrt($delta))/(2*$_GET['a']), 5).''; echo ''.round((-$_GET['b']+sqrt($delta))/(2*$_GET['a']), 5).''; echo ''; } elseif($delta < 0) { // 6 echo 'Delta ujemna. Brak rozwiązań w zbiorze liczb rzeczywistych!'; } else { // 7 echo 'Delta = 0. Jedno rozwiązanie: '.round((-$_GET['b'])/(2*$_GET['a']), 5); }

Jest to pierwszy tak długi kod zawarty w tym podręczniku, dlatego omówimy go sobie w punktach. Numery odpowiednich fragmentów zaznaczone są w kodzie komentarzami jednolinijkowymi.

Na początek sprawdzamy, czy użytkownik podał wszystkie parametry. Funkcja isset() zwraca wartość TRUE, jeżeli zmienna istnieje, a operator negacji (!) sugeruje, że kod w nawiasie chcemy wykonać wtedy, gdy tej zmiennej nie ma. Musimy wtedy podstawić za nią neutralną wartość 0, ponieważ inaczej skrypt będzie nam zgłaszać powiadomienia. Tutaj zaczynamy właściwy algorytm. Najpierw sprawdzamy, czy rzeczywiście mamy do czynienia z równaniem kwadratowym. Parametr a musi być różny od zera. W razie problemów instrukcją die() zatrzymujemy skrypt w tym miejscu. Liczymy współczynnik Δ. Funkcja pow(liczba, potega) podnosi podaną liczbę do odpowiedniej potęgi i działa szybciej, niż ręczne mnożenie wartości. Pierwszy wariant - kiedy Δ jest dodatnia... Oblicz każde z dwóch rozwiązań równania odpowiednim wzorem. Funkcja round(liczba, miejsca) zaokrągla nam wynik do określonej ilości miejsc po przecinku, natomiast sqrt(liczba) zwraca pierwiastek z podanej liczby. Zwróć uwagę na użycie nawiasów do zasugerowania właściwej kolejności działań. Gdy Δ jest ujemna, równanie nie ma rozwiązania. Ostatni z wariantów jest oczywisty, dlatego nie piszemy już warunku. To przecież ostatnia z możliwości. Równanie ma tylko jedno rozwiązanie i także je wyliczamy.

Jest to nasz pierwszy prawdziwie dynamiczny skrypt, który potrafi reagować inaczej w zależności od sytuacji. Poznaliśmy tutaj nie tylko kilka nowych funkcji, ale także sporo operatorów i zasadę działania instrukcji if. Jej formalna składnia jest następująca:

<?php if(wyrazenie) { // blok kodu } elseif(wyrazenie) { // blok kodu } else { // blok kodu }

Obowiązkowe jest podawanie pierwszego z członów zaczynającego się od if. Dwa pozostałe są opcjonalne, przy czym ilość elseif może być dowolna. Kolejność podawania kolejnych typów członów ukazana jest na przykładzie.

if - wykonuje się, gdy spełniony został podany warunek elseif - jeżeli nie został spełniony poprzedni warunek, PHP testuje aktualny i jeżeli jest prawdziwy, wykonuje ten kawałek kodu. else - wykonywane, jeżeli żaden z powyższych warunków nie został spełniony.

Jeżeli blok kodu zawiera tylko jedną instrukcję, PHP dopuszcza możliwość opuszczenia nawiasów klamrowych, np.

<?php if($zmienna == 6) echo 'Wartość zmiennej wynosi 6';

W tym podręczniku jednak nie będziemy jej stosować z powodu pogorszenia czytelności kodu, niemniej warto wiedzieć, iż składnia ta jest w pełni poprawna, ponieważ część programistów stosuje ją w praktyce.

Wyrażenie warunkowe powinno przyjmować wartości logiczne TRUE lub FALSE. Oto kilka przydatnych operatorów:

OperatorNazwaSkładniaOpis==Równośćwyrażenie == wyrażenieZwraca prawdę, jeżeli oba wyrażenia mają identyczną wartość.===Równośćwyrażenie === wyrażenieZwraca prawdę, jeżeli oba wyrażenia mają identyczną wartość oraz typ.!=Nierównośćwyrażenie != wyrażenieZwraca prawdę, jeżeli oba wyrażenia mają różne wartości.!==Nierównośćwyrażenie !== wyrażenieZwraca prawdę, jeżeli oba wyrażenia mają różne wartości i/lub typ.Większe niżwyrażenie > wyrażenieZwraca prawdę, jeżeli lewe wyrażenie ma większą wartość od prawego.=Większe lub równewyrażenie >= wyrażenieZwraca prawdę, jeżeli lewe wyrażenie ma większą lub równą wartość prawemu.!Negacja (nie)!wyrażenieZwraca prawdę, jeżeli wyrażenie jest fałszywe i fałsz, jeśli prawdziwe.&&Koniunkcja logiczna (i)wyrażenie && wyrażenieZwraca prawdę, jeżeli oba wyrażenia są prawdziwe.||Alternatywa logiczna (lub)wyrażenie || wyrażenieZwraca prawdę, jeżeli przynajmniej jedno z wyrażeń jest prawdziwe.

A teraz kilka przykładów...

<?php //Zakładamy, że do skryptu wysłano formularz z polami liczba1 i liczba2 if($_POST['liczba1'] == 1 && $_POST['liczba2'] == 2) { die('Liczba 1 wynosi 1, a liczba 2 wynosi 2'); }

Powyższy skrypt sprawdza, czy zmienna "liczba1" wynosi 1 i zmienna "liczba 2" wynosi 2.

<?php //Zakładamy, że do skryptu wysłano formularz z polami liczba1 i liczba2 if($_POST['liczba1'] == 1 || $_POST['liczba2'] == 1) { die('Liczba 1, lub liczba 2 wynosi 1'); }

Natomiast ten skrypt sprawdza, czy zmienna "liczba1", lub zmienna "liczba2" wynosi 1.

Wszystkie operatory podane wcześniej w tabelce przydają się przy konstruowaniu warunków. Pewnego wyjaśnienia domagają się == oraz ===. Popatrz sobie na taki przykład:

<?php if(FALSE == 0) { echo 'Prawda!'; }

PHP automatycznie sprowadzi tu sobie obie wartości do identycznego typu i wtedy dopiero je porówna. Dlatego skrypt wyświetli napis "Prawda!". Zamień teraz ten operator na ===. Po odświeżeniu zobaczymy, że teraz nic się nie pokazało. To dlatego, że zażądaliśmy, aby i typy obu wyrażeń były identyczne, podczas gdy nie są. Operator ten przydaje się przy niektórych funkcjach zwracających różne typy wartości w zależności od powodzenia operacji.

Oprócz tego w warunkach przyda się nam kilka funkcji: isset($zmienna) - zwraca prawdę, jeżeli zmienna istnieje. empty($zmienna) - zwraca prawdę, jeżeli zmienna ma wartość pustą (np. NULL, 0 albo pusty ciąg tekstowy). is_null($zmienna) - zwraca prawdę, jeżeli zmienna ma wartość NULL. is_string($zmienna) - zwraca prawdę, jeżeli zmienna jest ciągiem tekstowym. is_integer($zmienna) - zwraca prawdę, jeżeli zmienna jest liczbą całkowitą. is_float($zmienna) - zwraca prawdę, jeżeli zmienna jest liczbą zmiennoprzecinkową. is_numeric($zmienna) - zwraca prawdę, jeżeli zmienna jest liczbą. is_bool($zmienna) - zwraca prawdę, jeżeli zmienna ma wartość logiczną. is_array($zmienna) - zwraca prawdę, jeżeli zmienna jest tablicą.