В PHP съществуват конструкции, чрез които не само да определите дали даден израз е верен или не (дали връща като резултат „истина“ или „неистина“), но и да зададете на скрипта да извърши определени операции в зависимост от върнатия резултат.
1. Условна конструкция if
Условната конструкция if се използва за проверка на истинността на даден израз и задаване на последващо действие, като синтаксисът й е:
if (израз с оператор за сравнение) {направи това}
При тази конструкция все едно казвате: „Ако е изпълнено даденото условие, тогава направи ето това“.
Забележете, че изразът, в който се задава условието с оператора за сравнение, се поставя в кръгли скоби – (), а операцията, която трябва да се задейства ако е изпълнено условието, е поставена в големи скоби – {}.
Такъв вид конструкция връща като резултат булева стойност от израза в кръглите скоби, чиято истинност се проверява, т.е. върнатият резултат е „вярно“ или „невярно“. Ако резултатът е „вярно“, тогава се изпълнява операцията, зададена в големите скоби {}.
Например следния код:
<?php
$prom1 = 100;
$prom2 = "100";
if ($prom1 == $prom2)
{
$rezultat = "Двете променливи са с еднакви стойности";
echo "$rezultat";
}
?>
Този код ще изведе на екран съобщението „Двете променливи са с еднакви стойности„, тъй като чрез скрипта ние все едно даваме следното указание: „Провери дали са равни стойностите на променливите $prom1 и $prom2 и АКО са равни изведи на екран съобщението „Двете променливи са с еднакви стойности“.
Може и да не се използва променливата $rezultat, а директно да се зададе извеждане на надписа чрез echo:
if ($prom1 == $prom2)
{echo "Двете променливи са с еднакви стойности";}
В случая резултатът от сравнението е „вярно“, тъй като двете променливи имат еднакви стойности, макар че са различни по тип.
2. Условна конструкция if-else
Резонно възниква въпроса какво ще стане ако резултатът от проверката не е „истина“. Например да заменим оператора за равенство (==) с оператора за едновременно сравнение на стойност и на тип (===):
<?php
$prom1 = 100;
$prom2 = "100";
if ($prom1 === $prom2)
{
$rezultat = "Двете променливи са с еднакви стойности";
echo "$rezultat";
}
?>
Този код няма да ни върне никакъв резултат, защото условието, за да се покаже на екрана въведения текст, не е изпълнено – запитването е дали променливите са еднакви не само по стойност, но и по тип, а по тип те се различават. Освен това ние не сме указали какво да се прави в такъв случай.
Ясно е, че в такава ситуация е нужно някакво алтернативно решение – код, който да се изпълни ако поставеното условие не е истина.
За такива случаи е предвидено да се използва конструкцията if-else, чиито синтаксис е:
if (израз с оператор за сравнение) {направи това}
else {направи друго}
Чрез тази конструкция ние все едно казваме: „Ако поставеното условие е изпълнено (връща резултат „вярно“) – направи това, но ако то не е изпълнено (връща резултат „невярно“) – тогава направи ето това (друго действие)“.
Ако резултатът от проверката в израза след if е отрицателен, тогава се прескача кода, заключен в големите скоби след if, и се изпълнява кода в големите скоби след else. В такъв случай нашият примерен скрипт може да има вида:
<?php
$prom1 = 100;
$prom2 = "100";
if ($prom1 === $prom2)
{
$rezultat = "Двете променливи са с еднакви стойности";
echo "$rezultat";
}
else
{
echo "Променливите се различават или по стойност или по тип";
}
?>
Горният код ще върне като резултат надписа „Променливите се различават или по стойност или по тип„, тъй като резултатът от проверката е отрицателен, което означава, че се прескача показването на стойността на променливата $rezultat и директно се изпълнява кода, заключен в големите скоби след else.
Забележете, че след кръглите скоби, в които е затворен изразът за проверка (веднага след if), не се поставят точка и запетая, тъй като това не е край на инструкция.
3. Конструкция switch
Конструкцията switch може да спести многократното повторение на конструкция if-else. Switch има синтаксис, който позволява да се проверят множество условия едно след друго и в зависимост от върнатия резултат да се укаже изпълнение на някакво действие. Ключови думи и символи в конструкцията switch са:
- думата case, с която се задава израз за проверка,
- двоеточие, след което следва действие за изпълнение,
- думата break, с която се прекъсва изпълнението.
Switch дава възможност да се укаже и действие по подразбиране чрез думата default, което да се изпълни, в случай че нито едно от зададените условията не е изпълнено.
Например нека да имаме двете променливи от горния пример със стойности съответно 100 и „100“. Ще зададем да бъде последователно проверено:
- дали тези променливи са равни и по стойност и по тип,
- дали са равни поне по стойност.
Кодът ще бъде следният:
<?php
$prom1 = 100;
$prom2 = "100";
switch(true)
{
case $prom1 === $prom2: echo "Равни по стойност и тип";
break;
case $prom1 == $prom2: echo "Равни поне по стойност";
break;
default: echo "Не са равни нито по стойност нито по тип";
}
?>
На горния скрипт му е дадена следната задача:
- ако е вярно, че променливата $prom1 е равна на променливата $prom2 и по стойност и по тип, тогава изведи съобщението „Равни по стойност и тип“ и прекъсни изпълнението (break). Ако това условие не е изпълнено продължи нататък.
- ако двете променливи не са равни и по стойност и по тип, но са равни поне по стойност, тогава изведи съобщението „Равни поне по стойност“ и прекъсни изпълнението.
- ако двете променливи не са равни нито по стойност нито по тип, тогава изведи стандартно съобщение (default) за всички случаи когато условията не са изпълнени – „Не са равни нито по стойност нито по тип„.
В този случай изведеното съобщение ще бъде „Равни поне по стойност„.
Ако например зададем на $prom1 стойност 50, тогава ще се изпълни действието по подразбиране, указано след default, което е предвидено за всички случаи, когато нито едно условие не е върнало резултат „истина“, т.е. тогава съобщението ще бъде „Не са равни нито по стойност нито по тип“ и т.н.
4. Условен (троен) оператор
Измежду операторите има един, който е подходящо да бъде представен тук, тъй като той може да замести целия блок на конструкцията if-else. Това е един от най-ползваните оператори.
Операторът се нарича „троен оператор“, тъй като едновременно извършва 3 действия:
- Определя дали даден израз връща „истина“ или „неистина“,
- Ако връща „истина“ задава изпълнение на определено действие,
- Ако връща „неистина“ задава изпълнение на алтернативно действие.
От описанието става ясно, че тройният оператор е нещо като по-къс вариант на конструкцията if-else. Изписва се чрез въпросителния знак (?).
Синтаксисът на тройния оператор е следния:
израз ? ако е вярно направи това : ако е невярно направи друго
където
- „израз“ е изразът с оператор за сравнение, който се проверява дали ще върне резултат „вярно“ или „невярно“,
- „ако е вярно направи това“ е кодът, който трябва да се изпълни ако резултатът е „вярно“,
- „ако е невярно направи друго“ е кодът, който трябва да се изпълни ако резултатът е „невярно“.
Ключовите моменти от синтаксиса на тройния оператор са въпросителната (знака на самия оператор), която се поставя след израза, чиято истинност ще се проверява и двоеточието, което се поставя между указанията за операцията когато резултатът е бил „вярно“ и указанията за операцията когато резултатът е бил „невярно“.
За пример ще използваме същия код от примера за конструкцията if-else:
<?php
$prom1 = 100;
$prom2 = "100";
if ($prom1 === $prom2)
{
$rezultat = "Двете променливи са с еднакви стойности";
echo "$rezultat";
}
else
{
echo "Променливите се различават или по стойност или по тип";
}
?>
Ако трябва да получим същия резултат, но чрез използване на тройния оператор, тогава трябва да напишем кода:
<?php
$prom1 = 100;
$prom2 = "100";
$rezultat = $prom1 === $prom2 ?
"Двете променливи са с еднакви стойности" :
"Променливите се различават или по стойност или по тип";
echo "$rezultat";
?>
В случая извършваме проверка за истинност на израза $prom1 === $prom2, т.е. дали е вярно, че двете променливи са еднакви и по стойност и по тип, задаваме две възможности – при резултат „вярно“ и при резултат „невярно“ и едновременно с това присвояваме тези възможности на променливата $rezultat. По този начин променливата $rezultat приема някоя от двете стойности в зависимост от това дали резултатът е true или false. Накрая чрез echo показваме резултата.
Аналогичен резултат ще ни даде и кода:
<?php
$prom1 = 100;
$prom2 = "100";
echo $prom1 === $prom2 ?
"Двете променливи са с еднакви стойности" :
"Променливите се различават или по стойност или по тип";
?>
Тук имаме само сравнение между $prom1 и $prom2, задаване на съответните операции при резултат „истина“ и „неистина“ и извеждане на резултата на екран чрез echo, без стойностите да се присвояват на трета променлива.