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

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

| является поразрядным или, || является булевым или.

Имея в виду

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

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

Примеры

 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 (condition1 || condition2 || condition3) Если условие 1 истинно, условия 2 и 3 НЕ будут проверяться.

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

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

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

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

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

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

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

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

и если один из них возвращает false, запустите блок else, а «the» выполнит только блокировку else, если не вернет false »- может быть полезно,

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

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

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

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

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