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

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

Ответ 1

| является bitwise или || является boolean или.

Ответ 2

Значение

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

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

Примеры

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

Ответ 3

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

Например:

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

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

используя их.

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

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

nice NullReferenceException. С Or-Operator, который может быть не такой ловушкой, поскольку маловероятно, что вы запускаете что-то плохое,

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

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

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

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

но, как сказано, часто это дизайнерский запах.

Ответ 4

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

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

Ответ 5

| → бинарный оператор || → Булевский оператор или → также булевой оператор с более низким приоритетом

$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;