В чем разница между | и || операторы?

| а также || - В чем разница между этими двумя операторами в PHP?

5 ответов

Решение

| побитовый или, || является логическим или.

Имея в виду

| является двоичным оператором, он будет двоичным ИЛИ битами как левых, так и правых значений.

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

Примеры

print_r(1 | 2)  // 3
print_r(1 || 2) // 1

При использовании с функциями:

function numberOf($val) {
    echo "$val, ";
    return $val;
}

echo numberOf(1) | numberOf(2);  // Will print 1, 2, 3
echo numberOf(1) || numberOf(2); // Will print 1, 1

Как и операторы & и &&, двойной оператор является оператором "короткого замыкания".

Например:

if (условие1 || условие2 || условие3) Если условие 1 истинно, условия 2 и 3 НЕ проверяются.

if (условие1 | условие2 | условие3) Это проверит условия 2 и 3, даже если 1 уже верно. Поскольку ваши условия могут быть довольно дорогими функциями, вы можете получить хорошую

повышение производительности за счет их использования.

Есть одна большая оговорка, NullReferences или аналогичные проблемы. Например:

if (class! = null && class.someVar <20) Если class имеет значение null, оператор if остановится после того, как "class!= null" станет false. Если вы используете только &, он попытается проверить class.someVar, и вы получите

хороший NullReferenceException. С оператором "Ор" это может быть не такой уж ловушкой, так как маловероятно, что вы вызовете что-то плохое,

но это то, что нужно иметь в виду.

Никто никогда не использует сингл & или | операторы, хотя, если у вас нет дизайна, где каждое условие является функцией, которая должна быть

казнены. Звучит как дизайнерский запах, но иногда (редко) это чистый способ делать вещи. Оператор & "запускает эти 3 функции,

и если один из них возвращает false, выполните блок else ", в то время как | действительно" запускает блок else, только если никто не возвращает false" - может быть полезно,

но, как уже говорилось, часто это дизайнерский запах.

| -> бинарный оператор || -> логический оператор или -> также логический оператор с более низким приоритетом

$x = false | true; //will set $x to an integer
$x = false || true; //will set $x to true
$x = false or true; //will set $x to false exactly the same that:
($x = false) || true;

| работает с битами переменной: 2 | 4 = 6

|| действует на булево значение переменной: 2 || 4 = ИСТИНА

Другие вопросы по тегам