Я помню, как некоторое время назад читал о логических операторах, которые в случае OR
использования ||
были лучше or
(или наоборот).
Мне просто пришлось использовать это в своем проекте, когда он вернулся ко мне, но я не могу вспомнить, какой оператор был рекомендован или было ли это правда.
Что лучше и почему?
$e = true || $x = 'foo'
не будет определять$x
из-за короткого замыкания, а не из-за более высокого приоритета.27 or 0
возвращается27
для меня.or
возвращает логическое значение. Просто его приоритет настолько низок, что иногда кажется, что он делает что-то еще. :)print 27 or 0
будет печатать,27
потому чтоor
происходит послеprint 27
. Кстати,echo
не обманешь - выведуecho 27 or 0
бы1
.Они используются для разных целей и фактически имеют разные приоритеты операторов.
&&
И||
операторы предназначены для булевых условий, в то время какand
иor
предназначены для управления потоком.Например, следующее логическое условие:
Это отличается от потока управления:
источник
die()
функция будет вызвана, еслиdoSomething()
вернетсяfalse
илиnull
? Что делать, еслиdoSomething()
вернетсяtrue
или ничего?doSomething()
оценивается как логическое значение. Если он возвращает значение, которое PHP считает истинным (true
непустая строка и т. Д.), Он не будет вызыватьdie()
.Разница между соответственно || и OR, и &&, и AND - приоритет оператора :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
ISTRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
ISFALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
ISFALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
ISTRUE
источник
Источник: http://wallstreetdeveloper.com/php-logical-operators/
Вот пример кода для работы с логическими операторами:
источник
Я знаю, что это старая тема, но все же. Я только что столкнулся с проблемой в коде, который отлаживаю на работе, и, возможно, у кого-то может быть аналогичная проблема ...
Допустим, код выглядит так:
Вы ожидаете (как вы привыкли, например, из javascript), что когда $ this-> position () возвращает false или null, $ position является пустым массивом. Но это не так. Значение TRUE или FALSE зависит от того, что возвращает $ this-> position ().
Если вам нужно получить значение $ this-> position () или пустой массив, вы должны использовать:
РЕДАКТИРОВАТЬ:
Приведенный выше пример не работает по назначению , но истина заключается в том , что
||
иor
это не то же самое ... Попробуйте это:Вот результат:
Итак, на самом деле третий вариант
?:
- правильное решение, когда вы хотите установить возвращаемое значение или пустой массив.Протестировано с PHP 7.2.1
источник
$positions = $this->positions() ?? [];
скорее всего то, что вы хотите.Я не думаю, что один по своей сути лучше другого, но я бы посоветовал придерживаться || потому что это значение по умолчанию для большинства языков.
РЕДАКТИРОВАТЬ: Как отмечали другие, между ними действительно есть разница.
источник
Нет ничего плохого или лучшего, это просто зависит от приоритета операторов. Поскольку
||
имеет более высокий приоритет, чемor
, поэтому||
чаще всего используется.источник
Некоторые языки используют короткое замыкание, а другие используют полное логическое вычисление (если вы знаете, это похоже на директиву
$B
в Паскале).Пояснения:
В этом примере функция
B()
никогда не будет выполнена. Поскольку функцияA()
возвращает ИСТИНА, результат оператора ИЛИ известен из первой части без необходимости оценивать вторую часть выражения.Однако с
( A() || B() )
, вторая часть всегда оценивается независимо от значения первой.Для оптимизированного программирования вы всегда должны использовать то,
OR
что быстрее (за исключением случая, когда возвращается первая часть,false
а вторая часть действительно нуждается в оценке).источник
||
,B
не называться. Оба оператора делают то же самое, за исключением разницы в приоритете.