我一直认为OR是编写||的另一种方式PHP中的运算符。我更喜欢使用OR而不是||的唯一方法是因为它使代码更容易阅读,因为||可以与II或11或其他任何东西混淆......
有一天,我偶然发现了这件事:
<?php
$a = 'string_b';
$active = ($a == 'string_a') OR
($a == 'string_b') OR
($a == 'string_c');
var_dump($active); // Prints FALSE;
?>
为什么会这样?
答案 0 :(得分:4)
唯一的区别是运营商优先级,请参阅Operator precedence。 ||
的优先级高于OR
。
顺便说一下,var_dump($a)
返回 null
但打印正确的内容string_b
。
但是,var_dump($active)
确实会产生意外结果false
。
实际上,=
的优先级高于or
,因此您的代码相当于:
($active = ($a == 'string_a')) OR ($a == 'string_b') OR ($a == 'string_c');
首先将false
分配给活动,然后执行第一个OR
的右侧部分。
答案 1 :(得分:2)
它是一样的。但||
的优先级高于OR
http://php.net/manual/en/language.operators.precedence.php
答案 2 :(得分:1)
=具有比OR更高的优先级。因此,首先评估$ active =($ a =='string_a'),这是错误的。将整个右侧包含在它自己的括号中,您将得到您期望的结果。
<?php
$a = 'string_b';
$active = (
($a == 'string_a') OR
($a == 'string_b') OR
($a == 'string_c')
);
var_dump($active); // Prints TRUE;
?>