|
和||
- PHP中这两个运算符之间有什么区别?
答案 0 :(得分:21)
答案 1 :(得分:12)
|
是二元运算符,它将二进制或左手和右手值的位。
||
是一个布尔运算符,它遇到'true'时会short circuit(任何非零值,包括非空数组)。
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
答案 2 :(得分:1)
就像&和&&操作员,双操作员是“短路”操作员。
例如:
if(condition1 || condition2 || condition3) 如果condition1为true,则不检查条件2和3。
if(condition1 | condition2 | condition3) 这将检查条件2和3,即使1已经为真。由于你的条件可能是相当昂贵的功能,你可以得到一个好的
使用它们提升性能。
有一个很大的警告,NullReferences或类似的问题。例如:
if(class!= null&& class.someVar< 20) 如果class为null,则if-statement将在“class!= null”为false后停止。如果你只使用&,它将尝试检查class.someVar并得到一个
很好的NullReferenceException。使用Or-Operator可能不是一个陷阱,因为你不太可能触发坏事,
但要注意这一点。
没有人使用过单曲&或者但是,除非你有一个设计,其中每个条件都是一个函数
执行。听起来像是一种设计气味,但有时(很少)这是一种干净的做事方式。 &运算符“运行这3个函数,
如果其中一个返回false,则执行else块“,而”do“只运行else块,如果没有返回false” - 可能有用,
但如上所述,这通常是一种设计气味。
答案 3 :(得分:0)
|对变量的位进行操作:2 | 4 = 6
||对变量的布尔值进行操作:2 || 4 = TRUE
答案 4 :(得分:0)
| - >二元运算符|| - >布尔运算符或 - >也是一个布尔值 优先级较低的运算符
$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;