Php 还是令人惊讶的行为
我在php中使用或作为逻辑OR得到了一些令人惊讶的结果。Php 还是令人惊讶的行为,php,Php,我在php中使用或作为逻辑OR得到了一些令人惊讶的结果。 考虑到以下准则: $a = false; $b = false; $c = true; # Test 1, using OR and assigning to a variable $value = $a OR $b OR $c; var_dump( $value ); # return bool(false) but why? # Test 2, using OR directly in var_dump var_dump( $a
考虑到以下准则:
$a = false;
$b = false;
$c = true;
# Test 1, using OR and assigning to a variable
$value = $a OR $b OR $c;
var_dump( $value );
# return bool(false) but why?
# Test 2, using OR directly in var_dump
var_dump( $a OR $b OR $c );
# return bool(true) as expected
# Test 3, using || and assigning to a variable
$value = $a || $b || $c;
var_dump( $value );
# return bool(true) as expected
# Test 4, using || directly in var_dump
var_dump( $a || $b || $c );
# return bool(true) as expected
为什么测试1和测试2即使执行相同的逻辑运算,也会给出不同的结果?操作符和
或操作符的行为不一样。它们不能互换使用
如果您想要|
行为,请使用它。不要使用或
,除非|
会做错事
对于您的情况,这两行代码的行为完全相同:
$value = $a OR $b OR $c;
($value = $a) OR $b OR $c;
换句话说,您的代码基本上就是:
$value = $a;
如果您使用了|
操作符,则这两个操作符是相同的,就像您有这样的大括号一样:
$value = $a || $b || $c;
$value = ($a || $b || $c);
有关更多详细信息:如果将测试1括在括号中,它将按预期运行:
$value = ($a OR $b OR $c);
在测试2上运行var_dump时,会得到预期的结果,因为var_dump将操作包装在括号中
通常最好像这样用括号括起一个操作,尤其是变量赋值
此外,“OR”关键字和“| |”的行为方式也不同。请参阅此处的文档:
他们当然不会!总之,我讨厌生活在这样一个世界里,或
和|
是同一件事。答案需要链接:@sectus谢谢。完成。如果或的优先级低于=,则确实有意义。但是,使用优先级低于赋值运算符的逻辑运算符感觉有点不自然。谢谢你的详细回答!