Логические операторы, || или или?
Я помню некоторое время назад в отношении логических операторов, что в случае OR
использование ||
было лучше, чем OR
(или наоборот).
Мне просто пришлось использовать это в своем проекте, когда он вернулся ко мне, но я не помню, какой оператор был рекомендован, или если это было даже правдой.
Что лучше и почему?
Ответы
Ответ 1
Нет "лучшего", но наиболее распространенным является ||
. Они имеют разные приоритет и ||
будут работать, как обычно ожидалось.
См. также: Логические операторы (из этого выберем следующий пример):
// 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;
Ответ 2
Они используются для разных целей и фактически имеют разные приоритеты операторов. Операторы &&
и ||
предназначены для булевых условий, тогда как and
и or
предназначены для потока управления.
Например, следующее условие является булевым:
if ($foo == $bar && $baz != $quxx) {
Это отличается от потока управления:
doSomething() or die();
Ответ 3
Разница между соответственно || и 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
Ответ 4
Источник: 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>
Ответ 5
Я не думаю, что он по своей сути лучше другого, но я бы предложил придерживаться || потому что это значение по умолчанию на большинстве языков.
EDIT: Как указывали другие, действительно существует разница между ними.
Ответ 6
Нет ничего плохого или лучшего, это просто зависит от приоритета операторов. Поскольку ||
имеет более высокий приоритет, чем or
, поэтому ||
используется в основном.
Ответ 7
Я знаю, это старая тема, но все же. Я только что встретил проблему в коде, который я отлаживаю на работе, и, возможно, у кого-то может быть аналогичная проблема...
Скажем, код выглядит следующим образом:
$positions = $this->positions() || [];
Вы ожидали бы (как вы привыкли, например, от javascript), когда $this- > position() возвращает false или null, $position - пустой массив. Но это не так. Значение TRUE или FALSE зависит от того, что возвращает $this- > position().
Если вам нужно получить значение $this- > position() или пустого массива, вы должны использовать:
$positions = $this->positions() or [];
Ответ 8
Некоторые языки используют либо короткое замыкание, либо другие используют полную логическую оценку (если вы знаете, это похоже на директиву $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
, а вторая часть должна быть оценена).