PHP或令人惊讶的行为

时间:2015-01-11 03:01:32

标签: php

我使用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会给出不同的结果,即使它们执行相同的逻辑操作?

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