“|”和“||”运算符有什么区别?

16

||| - 在 PHP 中这两个运算符有什么区别?


5个回答

21

4
按位或操作意味着(a|b)的值是在a或b中任何一方被设为1的所有二进制位。逻辑或操作的意思是,(a||b)的值为真,如果a或b中至少一个为真,当两者都为真时也为真;如果两者都为假,则为假。 - i_am_jorf
1
作为一个小问题,PHP中是否可以像Java和C#一样在布尔值上使用按位或运算符?在这些情况下的实际区别是,||将执行快捷方式,如果左边的析取式返回true,则不会检查右边的析取式,而单个|将在两种情况下执行检查。 - Jacob Bellamy
1
@Jacob Bellamy:一个简单的测试(# php -r 'var_dump(true | true);')表明你可以这样做。 bool(true) 可能会自动转换为 int(1)。我个人对使用这种语法有些犹豫,因为我不一定希望我与之合作的其他人能够注意到微妙的差异。同样,我也不愿意使用 or 运算符,它与 || 不同,优先级低于赋值。 - Frank Farmer
请问能帮我一下吗?我对以下上下文(Laravel)中“|”的使用感到疑惑。['email' => 'required|email|unique:email,users'] - Michel
那是一个字符串。阅读Laravel文档以了解它的作用。 - Ignacio Vazquez-Abrams

12

意义

| 是一个二进制运算符,它会对左右两个值进行按位或运算。

|| 是一个布尔运算符,当其遇到'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

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 块” - 可以很有用,

但正如所说,通常这是一种设计问题。


0

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

0

| 操作变量的位: 2 | 4 = 6

|| 操作变量的布尔值: 2 || 4 = TRUE


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接