Я помню, как некоторое время читал в отношении логических операторов, что в случае OR
, используя ||
был лучше, чем (или наоборот).
Я просто должен был использовать это в своем проекте, когда он вернулся ко мне, но я не могу вспомнить, какой оператор был рекомендован, или если это было даже правдой.
Что лучше и почему?
Нет «лучшего», но наиболее распространенным является ||
, У них разные приоритеты и ||
будет работать, как и следовало ожидать.
См. Также: Логические операторы ( следующий пример берется оттуда ):
// The result of the expression (false || true) is assigned to $e // Acts like: ($e = (false || true)) $e = false || true; // The constant false is assigned to $f and then true is ignored // Acts like: (($f = false) or true) $f = false or true;
Они используются для разных целей и фактически имеют разные приоритеты операторов. &&
и ||
операторы предназначены для булевых условий, тогда как и / or
предназначены для потока управления.
Например, следующее условие является булевым:
if ($foo == $bar && $baz != $quxx) {
Это отличается от потока управления:
doSomething() or die();
Разница между соответственно || и OR и && и AND – приоритет оператора :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
равно TRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
– FALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
– FALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
равно TRUE
Источник: http://bit.ly/1hxDmVR
Вот пример кода для работы с логическими операторами:
<html> <head> <title>Logical</title> </head> <body> <?php $a=10; $b=20; if($a>$b) { echo " A is Greater"; } elseif($a<$b) { echo " A is lesser"; } else { echo "A and B are equal"; } ?> <?php $c=30; $d=40; //if(($a<$c)AND($b<$d)) if(($a<$c)&&($b<$d)) { echo "A and B are larger"; } if(isset($d)) $d=100; echo $d; unset($d); ?> <?php $var1=2; switch($var1) { case 1:echo "var1 is 1"; break; case 2:echo "var1 is 2"; break; case 3:echo "var1 is 3"; break; default:echo "var1 is unknown"; } ?> </body> </html>
с<html> <head> <title>Logical</title> </head> <body> <?php $a=10; $b=20; if($a>$b) { echo " A is Greater"; } elseif($a<$b) { echo " A is lesser"; } else { echo "A and B are equal"; } ?> <?php $c=30; $d=40; //if(($a<$c)AND($b<$d)) if(($a<$c)&&($b<$d)) { echo "A and B are larger"; } if(isset($d)) $d=100; echo $d; unset($d); ?> <?php $var1=2; switch($var1) { case 1:echo "var1 is 1"; break; case 2:echo "var1 is 2"; break; case 3:echo "var1 is 3"; break; default:echo "var1 is unknown"; } ?> </body> </html>
Я не думаю, что он по своей сути лучше другого, но я бы предложил придерживаться || потому что это значение по умолчанию на большинстве языков.
РЕДАКТИРОВАТЬ: Как указывали другие, действительно существует разница между ними.
Нет ничего плохого или лучшего, это просто зависит от приоритета операторов. Поскольку ||
имеет более высокий приоритет, чем or
, поэтому ||
в основном используется.
Я знаю, что это старая тема, но все же. Я только что встретил проблему в коде, который я отлаживаю на работе, и, возможно, у кого-то может быть аналогичная проблема …
Скажем, код выглядит так:
$positions = $this->positions() || [];
Вы ожидали бы (как вы привыкли, например, от javascript), когда $ this-> position () возвращает false или null, $ position – пустой массив. Но это не так. Значение TRUE или FALSE зависит от того, что возвращает $ this-> position ().
Если вам нужно получить значение $ this-> position () или пустого массива, вы должны использовать:
$positions = $this->positions() or [];
Некоторые языки используют либо короткое замыкание, либо другие используют полную логическую оценку (если вы знаете, это похоже на директиву $B
в паскале)
Пояснения:
function A(){ ...do somethings.. return true; } function B(){ ...do somethings.. return true; } if ( A() OR B() ) { .....
В этом примере функция B()
никогда не будет выполнена. Так как функция A()
возвращает TRUE, результат операции OR известен из первой части без необходимости оценивать вторую часть выражения.
Однако с ( A() || B() )
вторая часть всегда оценивается независимо от значения первого.
Для оптимизированного программирования вы всегда должны использовать OR
который быстрее (за исключением случая, когда первая часть возвращает false
а вторая часть должна быть оценена).