Instrukcje warunkowe są jednym z najczęściej wykorzystywanych elementów w językach programistycznych. Tak naprawdę wszystkie procesy zachodzące w aplikacjach, w tym skryptach PHP rozbijają się o logikę. Jeżeli wystąpiły takie parametry wtedy wykonaj takie operacje, jeżeli inne wtedy wykonaj inne operacje.
Konstrukcja if
Tłumacząc na polski instrukcja
if to nic innego jak polskie
jeżeli. Składnia konstrukcji jest prosta. W nawiasie zwykłym znajduję się warunek i jeżeli zostanie spełniony wtedy wykona się kod umiejscowiony w bloku.
Kod:<?php
$a = 1;
if($a == 1)
{
echo 'Zmienna $a ma wartość 1';
}
?>
Jak widzimy na powyższym listingu został użyty
operator porównania. Oprócz operatorów porównania możemy także używać
operatorów logicznych i innych w zależności od potrzeb sytuacji.
Kod:<?php
$b = false;
if(!$b)
{
echo 'Zanegowana zmienna $b ma wartość true';
}
?>
Konstrukcja elseif
Konstrukcję
elseif tłumaczymy
w przeciwnym wypadku jeżeli. Ów klauzulę możemy użyć po
if albo innym
elseif. Zapis
elseif i
else if oznacza to samo. To jaka formę będziecie stosować zależy tylko od Was.
Kod:<?php
$a = true;
if(!$a) // Ten warunek nie zostanie spełniony
{
echo 'Zanegowana wartość zmiennej $a wynosi true';
}
elseif($a && is_bool($a))
{
echo 'Zmienna $a jest typem boolowskim i ma wartość true';
}
?>
Oczywiście możemy dodać więcej niż jedną konstrukcję
elseif.
Kod:<?php
$a = 3;
if($a > 4) // Warunek niespełniony
{
echo '$a jest większe niż 4<br />';
}
else if($a > 3) // Warunek niespełniony
{
echo '$a jest większe niż 3<br />';
}
else if($a > 2) // Warunek spełniony
{
echo '$a jest większe niż 2<br />';
}
else if($a > 1) // Ten warunek nie zostanie spełniony ponieważ warunek powyżej został spełniony
{
echo '$a jest większe niż 1';
}
?>
Pamiętajmy, że w momencie spełnienia warunku przez instrukcje warunkowe kolejne warunki nie będą już sprawdzane.
Konstrukcja else
Klauzule
else oznacza
w innym wypadku. Możemy ją wstawić na końcu instrukcji sprawdzających tj. po
if albo
elseif. Instrukcja
else zostanie wykonana w sytuacji kiedy wszystkie poprzednie warunki nie zostaną spełnione.
Kod:<?php
$a = 2;
if($a == 1)
{
echo '$a jest równe 1';
}
else
{
echo '$a nie jest równe 1';
}
?>
Grupowanie warunków
Zdarzają się sytuacje, w których występuję więcej niż jeden warunek. Przy większej ilości warunków grupowanie warunków może stać się czynnością bardzo pomocna.
Kod:<?php
$a = $c = true;
$b = $d = false;
if($a AND $b || $c OR $d)
{
echo 'Udało się';
}
?>
Grupowanie dla powyższego przykładu powinno wygadać tak:
Kod:<?php
$a = $c = true;
$b = $d = false;
if(($a && $b) || ($c || $d))
{
echo 'Udało się';
}
?>
Opuszczanie nawiasów klamrowych
Jeżeli blok kodu zawiera tylko jedną instrukcje wtedy PHP dopuszcza możliwość opuszczenia nawiasów klamrowych. Taki manewr zmniejsza ilość linijek kosztem czytelności dokumentu.
Kod:<?php
$a = -1;
if($a) // Warunek zostanie spełniony
echo 'Warunek instrukcji warunkowej został spełniony';
else
echo 'Warunek instrukcji warunkowej nie został spełniony';
?>
W przypadku dodania ekstra linijki po warunku zostaniemy poinformowani o błędzie parsera.
Rzutowanie niejawne
Podczas porównywania warunków z użyciem operatora
== czyli równa się, PHP sprowadza obie wartości do jednego typu, a dopiero potem porównuje je. Oczywiście taka sytuacja ma miejsce kiedy porównywane typy zmiennych są rożne od siebie.
Kod:<?php
if(true == 1)
{
echo 'Prawda';
}
?>
Teraz dodajcie jeszcze jeden znak równa się do warunku i uruchomcie ponownie skrypt. Oczywiście tym razem warunek nie zostanie spełniony. Operator sprawdzania równości jak i identyczności przydaje się przy niektórych funkcjach zwracających różne typy wartości w zależności od powodzenia bądź niepowodzenia operacji.
Błąd początkujących
Czasami zdarza się, że osoby początkujące mylą
= z
== co w rezultacie powoduje wiele niepotrzebnego zamieszania. Jeżeli Twoja instrukcja warunkowa zachowuje się tak, jakby jej warunek był zawsze prawdziwy, upewnij się, że wstawiłeś tam prawidłowy operator!
Kod:<?php
if($x = 7)
{
echo 'Zmienna $x ma wartość 7';
}
?>
Szybkie omijanie warunku
Czasami zdarza się, że musimy
na szybko zmienić warunek instrukcji celem sprawdzenia poprawności działania kodu. W takim przypadku najłatwiej jest po prostu użyć wlepki zaprezentowanej poniżej.
Kod:<?php
$a = true;
$b = $c = false;
if($a AND $b || $b OR $c || 1==1) // Proste obejście
{
echo 'ok';
// i inne działania...
}
?>
Według mnie najwygodniej jest je dodawać w widocznym miejscu czyli albo na początku albo na końcu warunków. Osobiście preferuje koniec natomiast Wy wybierzcie miejsce, które odpowiada Wam najbardziej.
Ciekawostka
Używanie operatora porównania
=== do sprawdzania identyczności jest o około 5% szybsze aniżeli używanie operatora
== do sprawdzania równości. Oczywiście przy kilkunastu instrukcjach warunkowych nie robi to wielkiego znaczenia jednak jeżeli mamy bardzo rozbudowaną aplikacje i instrukcje warunkowe idą w tysiące wtedy ta mała różnica może przyczynić się do nieco szybszego działania skryptu. Szybsze działanie przy użyciu operatora identyczności ma związek z faktem, że nie zachodzi potrzeba konwersji (rzutowania) na inny typ.
Tabele porównań typów PHP
Poniżej zostały zamieszczone tabele dla rożnych typów porównań.
Porównanie zmiennej $x z funkcjami PHP
Wyrażenie
|
gettype()
|
empty()
|
is_null()
|
isset()
|
boolean: if($x)
|
$x = "";
|
string
|
true
|
false
|
true
|
false
|
$x = null;
|
null
|
true
|
true
|
false
|
false
|
var $x;
|
null
|
true
|
true
|
false
|
false
|
niezdefiniowany $x
|
null
|
true
|
true
|
false
|
false
|
$x = array();
|
array
|
true
|
false
|
true
|
false
|
$x = false;
|
boolean
|
true
|
false
|
true
|
false
|
$x = true;
|
boolean
|
false
|
false
|
true
|
true
|
$x = -1;
|
integer
|
false
|
false
|
true
|
true
|
$x = 0;
|
integer
|
true
|
false
|
true
|
false
|
$x = 1;
|
integer
|
false
|
false
|
true
|
true
|
$x = 7;
|
integer
|
false
|
false
|
true
|
true
|
$x = "-1";
|
string
|
false
|
false
|
true
|
true
|
$x = "0";
|
string
|
true
|
false
|
true
|
false
|
$x = "1";
|
string
|
false
|
false
|
true
|
true
|
$x = "php";
|
string
|
false
|
false
|
true
|
true
|
$x = "true";
|
string
|
false
|
false
|
true
|
true
|
$x = "false";
|
string
|
false
|
false
|
true
|
true
|
Porównania operatorem ==
|
true
|
false
|
1
|
0
|
-1
|
"1"
|
"0"
|
"-1"
|
null
|
array()
|
"php"
|
""
|
true
|
true
|
false
|
true
|
false
|
true
|
true
|
false
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
true
|
false
|
true
|
false
|
false
|
true
|
false
|
true
|
true
|
false
|
true
|
1
|
true
|
false
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
0
|
false
|
true
|
false
|
true
|
false
|
false
|
true
|
false
|
true
|
false
|
true
|
true
|
-1
|
true
|
false
|
false
|
false
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
"1"
|
true
|
false
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
"0"
|
false
|
true
|
false
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
"-1"
|
true
|
false
|
false
|
false
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
null
|
false
|
true
|
false
|
true
|
false
|
false
|
false
|
false
|
true
|
true
|
false
|
true
|
array()
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
true
|
false
|
false
|
"php"
|
true
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
""
|
false
|
true
|
false
|
true
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
true
|
Porównania operatorem ===
|
true
|
false
|
1
|
0
|
-1
|
"1"
|
"0"
|
"-1"
|
null
|
array()
|
"php"
|
""
|
true
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
1
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
0
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
-1
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
"1"
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
false
|
"0"
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
false
|
"-1"
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
false
|
null
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
false
|
array()
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
false
|
"php"
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|
false
|
""
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
false
|
true
|