Подтвердить что ты не робот

Логические операторы, || или или?

Я помню некоторое время назад в отношении логических операторов, что в случае OR использование || было лучше, чем OR (или наоборот).

Мне просто пришлось использовать это в своем проекте, когда он вернулся ко мне, но я не помню, какой оператор был рекомендован, или если это было даже правдой.

Что лучше и почему?

4b9b3361

Ответ 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, а вторая часть должна быть оценена).