我使用OR作为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 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会给出不同的结果,即使它们执行相同的逻辑操作?
答案 0 :(得分:4)
||
运算符和OR
运算符的行为不相同。它们不能互换使用。
如果您想要||
行为,请使用它。不要使用OR
,除非您处于||
做错事的情况。
至于你的情况,这两行代码的行为完全相同:
$value = $a OR $b OR $c;
($value = $a) OR $b OR $c;
换句话说,您的代码基本上只是:
$value = $a;
如果您使用||
运算符,则这两个运算符完全相同,就好像您有这样的大括号:
$value = $a || $b || $c;
$value = ($a || $b || $c);
有关详情:http://php.net/manual/en/language.operators.precedence.php
答案 1 :(得分:0)
如果将测试1包装在括号中,它将按预期运行:
$value = ($a OR $b OR $c);
当您在测试2上运行var_dump时,您会得到预期的结果,因为var_dump将操作包装在括号中。
通常最好将操作包装在这样的括号中,尤其是使用变量赋值。
此外," OR"关键字和" ||"不要表现得一样。请参阅此处的文档 http://php.net/manual/en/language.operators.logical.php