我在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
有人知道第二个结果是怎么出来的吗?
谢谢:)
or
和and
的优先级低于=
。
这是有效的:
($a = false) OR true;
($a = true) OR false;
$a = (false || true);
请注意,这就是人们倾向于使用or die()
结构的原因(它真的,真的,真的应该是or trigger_error()
的,die
的错误在代码中没有位置):如果左侧赋值的结果(在这种情况下$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
称为操作符的优先级。
看到
$a = false OR true;
与
相同($a = false) OR true;
等等…