我有一个代码库,开发人员决定使用AND和OR,而不是&&和||。

我知道运算符的优先级是不同的(&&在和之前),但对于给定的框架(准确地说是PrestaShop),这显然不是一个原因。

你用的是哪个版本?and比&&更易读?还是没有区别?


当前回答

根据使用方式的不同,它可能是必要的,甚至是方便的。 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;

但在大多数情况下,这似乎更像是开发人员的口味,就像我在@Sarfraz提到的CodeIgniter框架中看到的每一次这种情况。

其他回答

根据使用方式的不同,它可能是必要的,甚至是方便的。 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;

但在大多数情况下,这似乎更像是开发人员的口味,就像我在@Sarfraz提到的CodeIgniter框架中看到的每一次这种情况。

你用的是哪个版本?

如果我正在为之编写代码的特定代码库的编码标准指定了应该使用哪个操作符,那么我肯定会使用它。如果不是,并且代码规定了应该使用哪个(不经常使用,可以很容易地解决),那么我将使用它。否则,可能是&&。

“and”比“&&”更易读吗?

你是否更容易理解。答案是肯定的,也不是,这取决于很多因素,包括操作符周围的代码,以及阅读它的人!

||有~差别吗?

是的。请参阅||的逻辑运算符和~的位运算符。

为了安全起见,我总是用圆括号括起来,并将它们分隔开。这样,我就不必依赖运算符优先级:

if( 
    ((i==0) && (b==2)) 
    || 
    ((c==3) && !(f==5)) 
  )

让我解释一下"和" - "& &" - "&"的区别。

“&&”和“and”都是逻辑与操作,它们做同样的事情,但操作符优先级不同。

运算符的优先级(优先级)指定了它将两个表达式绑定在一起的“紧密程度”。例如,在表达式1 + 5 * 3中,答案是16而不是18,因为乘法(“*”)运算符的优先级高于加法(“+”)运算符。

在一次操作中混合它们,在某些情况下可能会给你意想不到的结果 我建议总是使用&&,但那是你的选择。


另一方面,"&"是一个按位的AND操作。它用于计算和操作整数值中的特定位。

例如,如果你这样做(14 & 7),结果将是6。

7   = 0111
14  = 1110
------------
    = 0110 == 6

&&和和之间的优先级不同(&&的优先级高于and),这在与三元运算符组合时会引起混淆。例如,

$predA && $predB ? "foo" : "bar"

将返回一个字符串,而

$predA and $predB ? "foo" : "bar"

将返回布尔值。