1

我在 PHP 5.4.3 中遇到了一个奇怪的错误

var_dump(false OR true); // boolean true // OK

$a = false OR true;
var_dump($a); // boolean false // !!????

$a = true OR false;
var_dump($a); // boolean true // OK

$a = false || true;
var_dump($a); // boolean true // OK

有谁知道第二个结果是怎么来的!?

谢谢 :)

4

2 回答 2

7

or然后and具有较低的 优先=

这实际上是:

($a = false) OR true;
($a = true) OR false;
$a = (false || true);

请注意,这就是人们倾向于使用or die()构造的原因(实际上,真的,真的应该是or trigger_error()'s, die's on errors 在代码中没有位置):如果左手赋值的结果($a在这种情况下的结果值) 是false,执行右手边。

比较:

$a = false or print("what is going on?");
// prints 'what is going on?', $a === false
$a = true or print("what is going on?");
// prints nothing, $a === true
于 2013-03-07T16:43:32.640 回答
2

它被称为运算符的优先级。

这里

所以

$a = false OR true;

是相同的

($a = false) OR true;

ETC...

于 2013-03-07T16:43:52.763 回答