|
和 ||
- 在 PHP 中这两个运算符有什么区别?
# php -r 'var_dump(true | true);'
)表明你可以这样做。 bool(true)
可能会自动转换为 int(1)
。我个人对使用这种语法有些犹豫,因为我不一定希望我与之合作的其他人能够注意到微妙的差异。同样,我也不愿意使用 or
运算符,它与 ||
不同,优先级低于赋值。 - Frank Farmer|
是一个二进制运算符,它会对左右两个值进行按位或运算。
||
是一个布尔运算符,当其遇到'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(condition1 || condition2 || condition3) 如果条件1为真,则不会检查条件2和3。
if(condition1 | condition2 | condition3) 这将检查条件2和3,即使1已经为真。由于您的条件可能是相当昂贵的函数,因此使用它们可以获得良好的性能提升。
有一个很大的警告,空引用或类似问题。例如:
if(class != null && class.someVar < 20) 如果class为空,则if语句在“class!= null”为false后停止。如果只使用&,它将尝试检查class.someVar并且您会得到一个漂亮的NullReferenceException。对于Or-Operator来说,这可能不是一个陷阱,因为不太可能触发什么不好的事情,但这是需要记住的事情。
除非您有一个每个条件都是必须的函数的设计,否则没有人会使用单个&或|运算符。
执行。听起来像是设计上的问题,但有时候(很少)这是一种干净的做事方式。& 运算符执行“运行这三个函数,如果其中一个返回 false,则执行 else 块”,而 | 则执行“仅在没有任何一个返回 false 时运行 else 块” - 可以很有用,
但正如所说,通常这是一种设计问题。
| -> binary operator || -> Boolean operator or -> also a Boolean operator with lower precedence
$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 = TRUE