Intereting Posts
как получить месяц с даты в mysql Как реализовать проверку подлинности Google OpenID в PHP и тесте на локальном хосте Объединить 3 массива в один цикл foreach мое изображение captcha, которое не отображается на моей странице при вызове captcha.php yii2 – функция загрузки модели не устанавливает некоторые атрибуты модели Корзина WooCommerce – Переменная динамической цены переходит в пользовательский ценовой крючок Как взять SMS и позвонить, чтобы предупредить кого-то, исходя из того, что говорит СМС? Пространства имен в PHP, предотвращающие использование статических функций Yii Идентификатор страницы Joomla Нужно обновить мою базу данных одного пользователя, чтобы позволить нескольким пользователям, как изменить схему базы данных? Как показать кнопку «плюс» при удалении изображения? Как автоматически избежать строк в запросе PHP SQL? Использовать PHP-композитор для клонирования git repo Изменить URL-адрес администратора WordPress Не удается закрыть соединения ODBC

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

Я помню, как некоторое время читал в отношении логических операторов, что в случае 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)
  • Значение $boolFALSE

$bool = TRUE && FALSE;

  • интерпретируется как ($bool = (TRUE && FALSE))
  • Значение $boolFALSE

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