Изработка на фирмен сайт

Razberi.info се посещава от около 1000 - 1200 човека дневно. Искате банер в сайта или рекламна статия? Свържете се с нас на webselo.com/services

 

В този материал ще разгледаме възможностите за проверка на повече от едно условие. Да разгледаме следния пример:

<?php
$a=111;
$b=222;
if($a==111 && $b==222)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";    
}
?>

В този пример задаваме някакви стойности на две променливи $a и $b. В скобите на условния оператор правим проверка със знака && дали и двете условия са изпълнени. Само ако и двете са изпълнени, тогава ще се изпълни първият код, тоест     echo "uslovieto e izpylneno"; . Ако едното условие не е изпълнено или и двете не са изпълнени, ще се изпълни вторият код, тоест този:     echo "uslovieto ne e izpylneno";    . В нашия случай условието е изпълнено, но вижте какво става, когато променим нещо съвсем малко по кода

<?php
$a=1112;
$b=222;
if($a==111 && $b==222)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";    
}
?>

Вече условието не е изпълнено. Всъщност && е оператор. При използването в горепосочените примери единственият начин кодът да се изпълни, е всички условия да отговарят.

Логическият оператор или ||

С или || имаме възможност да създаваме още по-гъвкави приложения с условия в логиката или едното условие да е вярно, или другото, пример:

<?php
$a=121321112;
$b=222;
if($a==111 || $b==222)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";    
}
?>

В този пример имаме две променливи и правим проверка дали поне една от тях отговаря на някое от условията. Ако отговаря, първият код     echo "uslovieto e izpylneno"; ще се изпълни, ако ли пък не - вторият код     echo "uslovieto ne e izpylneno";    ще се изпълни. В случая кодът се изпълнява. Нека да видим какво ще стане, ако направим малка промяна:

<?php
$a=121321112;
$b=22442;
if($a==111 || $b==222)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";    
}
?>

В случая условието не е изпълнено и първият код няма да се изпълни. Ще се изпълни кодът след else.


 

Използване на if, else, && и ||

Да го илюстрираме със следния пример:

<?php
$a=11;
$b=12;
$c=14;
if($a==11 || $b==12 && $c==55)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";    
}
?>

В този пример булевият резултат би трябвало да бъде false, тоест да ни бъде показан резултатът на else, че условието не е изпълнено, тъй като при проверката с условния оператор if if($a==11 || $b==12 && $c==55) се оказва, че се проверява дали $c==55, а всъщност $c=14 . Причината да получаваме false вместо true се дължи на това, че PHP се опитва да спести ресурси при работата си. Правейки проверката:

$a==11 || $b==12 && $c==55

PHP вижда, че имам условие или след дадена променлива, тоест тук:

$a==11 || и всичко след оператора или за PHP няма да е задължително условие, макар в случая да имаме такова, тоест &&. Това е нещо по-спефично за PHP и се дължи на това, че в момента, в който PHP прецени, че дадено условие е вярно, той никога няма да изпълни останалите условия.

Ако желаем да направим задължителна проверка за дадено условие, трябва да сложим оператора и && в скоби (). Ето пример:

<?php
$a=11;
$b=12;
$c=55;
if(($a==11 || $b==12) && $c==55)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";    
}
?>

Логиката на това нещо е следната if(($a==11 || $b==12) && $c==55)

Ако резултатът от скобите ($a==11 || $b==12) има булева стойност true и $c има булева стойност true, тогава се изпълнява:  echo "uslovieto e izpylneno";.

Да направим лека промяна на кода:

<?php
$a=11;
$b=12;
$c=8888888888;
if(($a==11 || $b==12) && $c==55)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";   
}
?>

В този пример булевата стойност на $c е false, а тя е задължително условие, следователно ще се изпълни кодът на else.

И трети пример със същия код:

<?php
$a=11;
$b=12;
$c=55;
if(($a==666 || $b==777) && $c==55)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";   
}
?>

В този пример отново условито не е изпълнено, защото изразът в скобите ($a==666 || $b==777) дава булева стойност false, а той е в задължително условие с && $c .

И един последен пример:

<?php
$a=11;
$b=12;
$c=55;
if(($a==11 || $b==777) && $c==55)
{
    echo "uslovieto e izpylneno";
}
 else {
    echo "uslovieto ne e izpylneno";   
}
?>

Тук, макар в скобите променливата $b да не отговаря на условието, резултатът от тях е true, тъй като това не е задължително условие , а е операторът или ||. Затова условието е изпълнено, тъй като и && $c==55 отговаря на условието.

В последните примери можете да мислите за примерите в скобите като за приоритета в математическите операции - винаги се извършва първо действието в скобите!

Изработка на уебсайтове, реклама и поддръжка в социалните мрежи, копирайтинг услуги