В този материал ще разгледаме възможностите за проверка на повече от едно условие. Да разгледаме следния пример:
<?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 отговаря на условието.
В последните примери можете да мислите за примерите в скобите като за приоритета в математическите операции - винаги се извършва първо действието в скобите!