PHP/Instrukcja if
Instrukcja if
edytujZ 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).
<?php
// 1
if(!isset($_GET['a']))
{
$_GET['a'] = 0;
}
if(!isset($_GET['b']))
{
$_GET['b'] = 0;
}
if(!isset($_GET['c']))
{
$_GET['c'] = 0;
}
// 2
if($_GET['a'] == 0)
{
die('Nieprawidłowy parametr A!');
}
// 3
$delta = pow($_GET['b'], 2) - 4 * $_GET['a'] * $_GET['c'];
// 4
if($delta > 0)
{
// 5
echo 'Delta dodatnia. Dwa rozwiązania:<ul>';
echo '<li>'.round((-$_GET['b']-sqrt($delta))/(2*$_GET['a']), 5).'</li>';
echo '<li>'.round((-$_GET['b']+sqrt($delta))/(2*$_GET['a']), 5).'</li>';
echo '</ul>';
}
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, natomiastsqrt(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:
Operator | Nazwa | Składnia | Opis |
---|---|---|---|
== | Równość | wyrażenie == wyrażenie | Zwraca prawdę, jeżeli oba wyrażenia mają identyczną wartość. |
=== | Równość | wyrażenie === wyrażenie | Zwraca prawdę, jeżeli oba wyrażenia mają identyczną wartość oraz typ. |
!= | Nierówność | wyrażenie != wyrażenie | Zwraca prawdę, jeżeli oba wyrażenia mają różne wartości. |
!== | Nierówność | wyrażenie !== wyrażenie | Zwraca prawdę, jeżeli oba wyrażenia mają różne wartości i/lub typ. |
< | Mniejsze niż | wyrażenie < wyrażenie | Zwraca prawdę, jeżeli lewe wyrażenie ma mniejszą wartość od prawego. |
> | Większe niż | wyrażenie > wyrażenie | Zwraca prawdę, jeżeli lewe wyrażenie ma większą wartość od prawego. |
<= | Mniejsze lub równe | wyrażenie <= wyrażenie | Zwraca prawdę, jeżeli lewe wyrażenie ma mniejszą lub równą wartość prawemu. |
>= | Większe lub równe | wyrażenie >= wyrażenie | Zwraca prawdę, jeżeli lewe wyrażenie ma większą lub równą wartość prawemu. |
! | Negacja (nie) | !wyrażenie | Zwraca prawdę, jeżeli wyrażenie jest fałszywe i fałsz, jeśli prawdziwe. |
&& | Koniunkcja logiczna (i) | wyrażenie && wyrażenie | Zwraca prawdę, jeżeli oba wyrażenia są prawdziwe. |
|| | Alternatywa logiczna (lub) | wyrażenie || wyrażenie | Zwraca 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.
Uwaga!
|
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ą.