PHP условие: двойной && амперсант “и” и двойной || “или”

12 Август 2014

Метки: php, php условие, двойное условие php, условия и или

Пишу как заметку новичку, т.к. у самого были сомнения (php меня не учили, всё сам).
Так вот, в чем разница между двойным “и” амперсантом, или двойным “или”?
Грубо говоря, PHP условие: двойной && амперсант “и” и двойной || “или”,
говорит о том, что нужно проверять условия поочередно.

Т.е., допустим у Вас есть “условие1″ и “условие2″.

В итоге, если написать:

//первый вариант
if($uslovie1 & $uslovie2){...}

//второй вариант
if($uslovie1 && $uslovie2){...}

То, в первом случае, скрипт проверит первое условие, затем второе, затем посмотрим – оба ли они TRUE и решит что делать.
Во втором случае, т.е. ДВОЙНОМ, условия (что логично), проверяются по очереди…т.е. если условие1 уже не TRUE, то второе даже проверяться не будет.

Это легко проверить:

//функция выводит на экран "проверили а" и возвращает FALSE 
function a(){
	echo '
	Проверили A';return false;
}
//функция выводит на экран "проверили б" и возвращает TRUE
function b(){
	echo '
	Проверили Б';return true;
}
//теперь само условие, т.е. мы 
if(a() & b()){
    echo '
    >Условие выполнено';
}else{
    echo '
    >Условие не выполнено';
}
/* в результате получим:
Проверили A
Проверили Б
>Условие не выполнено

т.е. Скрипт проверил оба условия, а если использовать двойной амперсант:
*/

if(a() && b()){
    echo '
    >Условие выполнено';
}else{
    echo '
    >Условие не выполнено';
}
/* в результате получим:
Проверили A
>Условие не выполнено

т.е. Скрипт даже не проверял условие2, что очень удобно, если b() очень сложная функция,
которую и проверять не стоит, если условие1 (a()) уже не TRUE
*/

Таким же образом обстоят дела с оператором “ИЛИ”, т.е. | вертикальной чертой.

Если использовать if(условие1 | условие2){…} , то проверятся оба условия, затем будет принято решение, но это увеличит нагрузку…

А если использовать if(условие1 || условие2){…} , то при положительном условии1, условие2 даже проверяться не будет, т.к. “ИЛИ” и одно TRUE уже есть.

Думаю, кому-нибудь пригодится.
Удачи!


 

Похожие записи


© 2006 - 2024, Александр Сергеев