“AND”和“&&”作为操作符
我有一个代码库,开发人员决定使用AND和OR来代替&&和||  。 
 我知道运算符的优先级有所不同( &&前面and ),但是对于给定的框架( PrestaShop是精确的),显然不是一个理由。 
 你正在使用哪个版本? 比&&更可读吗? 还是没有区别? 
 如果你使用AND和OR ,你最终会被这样的事情绊倒: 
 $this = true; $that = false; $truthiness = $this and $that; 
 想猜测$truthiness等于什么? 
 如果你说false … bzzzt,对不起,错! 
 上面的$truthiness是true 。 为什么?  =具有比and 更高的优先级 。 加上括号来显示隐含的顺序使得这个更清楚: 
 ($truthiness = $this) and $that 
 如果您在第一个代码示例中使用了&&而不是,那么它将按预期工作并且是false 。 
 正如在下面的评论中所讨论的,这也可以得到正确的值,因为括号具有比=更高的优先级: 
 $truthiness = ($this and $that) 
取决于如何使用它,可能是必要的,甚至是方便的。 http://php.net/manual/en/language.operators.logical.php
 // "||" has a greater precedence than "or" // The result of the expression (false || true) is assigned to $e // Acts like: ($e = (false || true)) $e = false || true; // The constant false is assigned to $f and then true is ignored // Acts like: (($f = false) or true) $f = false or true; 
但在大多数情况下,它似乎更像是一个开发人员的味道,就像我在CodeIgniter框架(例如@Sarfraz所提到的)中看到的每一个事情一样。
&&与和之间的优先顺序不同(&&优先级高于和),与三元运算符结合会导致混淆。 例如,
 $predA && $predB ? "foo" : "bar" 
将返回一个string,而
 $predA and $predB ? "foo" : "bar" 
将返回一个布尔值 。
 由于and优先级低于=你可以在条件分配中使用它: 
 if ($var = true && false) // Compare true with false and assign to $var if ($var = true and false) // Assign true to $var and compare $var to false 
为了安全起见,我总是把我的比较括起来,并把它们分开。 这样,我不必依靠运营商的优先顺序:
 if( ((i==0) && (b==2)) || ((c==3) && !(f==5)) ) 
你正在使用哪个版本?
 如果我正在编写代码的编码标准规定了哪个运算符应该使用,那么我一定会使用它。 如果没有,代码规定应该使用(不经常,可以很容易解决),那么我会使用它。 否则, 可能 && 。 
“和”比“&&”更具可读性?
这对你更可读吗 ? 答案是肯定的,不取决于许多因素,包括运营商周围的代码,甚至是读者的代码!
|| 有〜差别?
 是。 请参阅|| 逻辑运算符 和~ 按位运算符 。 
我想这是一个口味的问题,虽然(错误地)混合起来可能会导致一些不受欢迎的行为:
 true && false || false; // returns false true and false || false; // returns true 
因此,使用&&和|| 比较安全,因为它们的优先级最高。 在可读性方面,我会说这些操作符是足够通用的。
更新 :关于评论说,这两个操作返回false …呃,其实上面的代码不会返回任何东西,我很抱歉的歧义。 澄清:第二种情况下的行为取决于如何使用操作的结果。 观察运营商的优先性如何发挥作用:
 var_dump(true and false || false); // bool(false) $a = true and false || false; var_dump($a); // bool(true) 
  $a === true的原因是因为赋值运算符优先于任何逻辑运算符,在其他答案中已经很好地解释了。 
这里有一个小例子:
 $a = true; $b = true; $c = $a & $b; var_dump(true === $c); 
输出:
 bool(false) 
 我认为这种打字错误更可能导致潜在的问题(与== vs ==相同),并且比adn / ro打字错误的可能性要小得多。 我也发现和/或更容易阅读。  FWIW,大多数表示偏好(大多数不会)指定和/或的PHP框架。 我也从来没有遇到一个真正的,没有人为的情况下,它将是重要的。