1. Начало
  2. Уеб сайт
  3. Уеб разработка
  4. PHP за начинаещи
  5. PHP конструкции
  6. Условни (контролни) конструкции в PHP (if, if-else и switch)

Условни (контролни) конструкции в PHP (if, if-else и switch)

В 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“. Ще зададем да бъде последователно проверено:

  1. дали тези променливи са равни и по стойност и по тип,
  2. дали са равни поне по стойност.

Кодът ще бъде следният:

<?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 действия:

  1. Определя дали даден израз връща „истина“ или „неистина“,
  2. Ако връща „истина“ задава изпълнение на определено действие,
  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, без стойностите да се присвояват на трета променлива.

Обновена: 02.04.2022
Беше ли Ви полезна тази статия?

Вижте още