W każdym języku programowania niezwykle ważnym elementem jest zastosowanie konstrujcki warunkowych. Jeśli zmienna a ma wartość 1 wykonaj te instrukcje jeżeli wartość tej zmiennej jest inna wykonaj inne instrukcje. Dziś wyjasnienie jak takie konstrukcje wyglądają w PHP.
Instrukcja warunkowa if
Konstrukcje warunkowe służą do sprawdzania, czy dane wyrażenie zwraca wartość prawdziwą (
true), czy fałszywą (
false).
Wyrażeniem jest z reguły jakieś porównanie, typu "czy 4 jest większe od 7?". To wyrażenie zwróciłoby
false.
A jak zapisać takie porównania? Służą do tego operatory. Oto ich wykaz i krótki opis:
<?php
== // równa się
!= // nie równa się (jest różne od)
< // jest mniejsze
> // jest większe
<= // jest mniejsze lub równe
>= // jest większe lub równe
?>
Czyli nasze poprzednie wyrażenie wyglądałoby tak:
4 > 7
Tyle chyba pamiętamy z matematyki... :) Oczywiście to wyrażenie nie ma sensu, innymi słowy zwraca
false.
A teraz od razu trudniejsze zadanie. Jeżeli zmienna $a jest mniejsza lub równa od zmiennej $b, to wyświetl wartość zmiennej $a. W przeciwnym razie wyświetl $b.
I tu się pojawia słówko
if wraz z słówkiem
else.
<?php
if ($a <= $b)
{
echo $a;
}
else
{
echo $b;
}
?>
I po kolei:
- if wprowadza konstrukcję warunku;
- w nawiasach okrągłych jest sprawdzane wyrażenie;
- następnie w klamrach instrukcje (może być ich tu dużo) wykonywane wtedy, gdy warunek jest prawdziwy;
- potem else określa część, od której wykonywane są instrukcje gdy warunek nie jest spełniony;
- instrukcje w klamrach
Uwaga: część
else i instrukcje po tym słowie są opcjonalne. Jeżeli ich nie podamy, to gdy warunek będzie fałszywy, to nic się nie stanie. Skrypt będzie wykonywał kolejne instrukcje.
To jeszcze nic. Możemy sprawdzać nawet kilka warunków naraz. Dla przykładu: Jeżeli jest zima
i jest śnieg, to możemy ulepić bałwana (oba warunki muszą być spełnione - nie licząc wyjątkowo długo utrzymujących się niskich temperatur, no ale klimat się ociepla :)). Albo: jeżeli mamy gotówkę
lub mamy kartę kredytową, to możemy zapłacić. Tu wystarczy jeden warunek.
I jeszcze inaczej. Jeżeli
nie mamy garnituru, to nie wpuszczą nas na bal. Jest to zaprzeczenie warunku "mam garnitur".
I do takiego wielokrotnego porównania lub przeczenia służą operatory logiczne. Oto ich niezbyt długa lista:
<?php
&& // AND - i
|| // OR - lub
! // NOT - nie
?>
Bardzo użyteczna możliwość PHP - sprawdzanie hasła. W zmiennej $password jest prawidłowe hasło. Zmienna $login zawiera prawidłowy login.
Z formularza są pobrane zmienne (o pobieraniu danych z formularza będzie mowa w części 5 kursu) $_POST['form_password'] i $_POST['form_login']. Jeżeli i login i hasło są prawidłowe, to witamy. Jeżeli nie... cóż...
<?php
if ($login == $_POST['form_login'] && $password == $_POST['form_password'])
{
echo 'Witamy na tajnej stronie!';
}
else
{
echo 'Kto ci pozwolił tu wchodzić!!!';
}
?>
A teraz sprawdzamy czy zmienna $liczba należy do sumy: przedziału domkniętego od $a do $b i przedziału otwartego od $c do $d.
<?php
echo $a;
if (!(($liczba >= $a && $liczba <= $b) || ($liczba > $c && $liczba < $d))
{
echo ' nie ';
}
echo 'należy do tego przedziału';
?>
I komentarz do tego skomplikowanego warunku. Można to tak interpretować: jeżeli $liczba
nie należy do żadnego z tych przedziałów (przy okazji: suma przedziałów to operator lub - ||) to napisz "nie".
A potem już leci że należy itd.
else jest tu niepotrzebne, bo jeżeli liczba należy do sumy przedziałów, to po prostu piszemy "należy...".
Warunki jeszcze inaczej, czyli słowo switch
Słowo
switch to też inny typ sprawdzania warunku. Jednak
switch potrafi sprawdzić tylko równość. Za to może sprawdzać wiele możliwości (switch znaczy po angielsku przełączać).
Zawsze występuje z nim jeszcze słowo
case i w większości przypadków
break.
Może być używane do najbanalniejszego wyświetlania różnych komunikatów (dla przykładu, z reguły stosuje się do poważniejszych celów :) ).
Z formularza pobierana jest zmienna $samochod. Oto składnia i to, co
switch może zrobić z samochodem :))).
<?php
switch ($samochod)
{
case 'Opel':
echo 'Ja też mam Opla!';
break;
case 'Ford':
echo 'eee... Dziadostwo...';
break;
case 'Maluch':
echo 'No i tak trzymać! Maluch rulez!';
break;
}
?>
Składnia:
- switch
- w nawiasach okrągłych zmienna, którą porównujemy
- klamra otwierająca
- słówko case, wartość i dwukropek
- instrukcje wykonywane gdy zmienna równa się wartości przy case
- break
- i tak wszystkie case (przypadki), a potem klamra zamykająca switch
A po co jest
break (przerwa)? A po to, że bez niego wykonają się instrukcje po wszystkich następnych
case. W efekcie mielibyśmy:
Ja też mam Opla!eee... Dziadostwo...No i tak trzymać! Maluch rulez!
Razem ze switch można spotkać jeszcze jedno słowo: default. Po tym słowie następuje (jak w przypadku case) instrukcje, które zostaną wykonane wtedy i tylko wtedy, gdy, wartość przy switch nie odpowiada żadnemu case. Default to po angielsku "domyślny", stąd i takie zastosowanie.