[Php] 'AND'和'&&'作为运算符


Answers

根据使用方式的不同,这可能是必要的,甚至是方便的。 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框架中看到的每一次这样的事情。

Question

我有一个代码库,开发人员决定使用ANDOR来代替&&||

我知道运算符的优先级有所不同( &&在之前and ),但是对于给定的框架( PrestaShop是精确的),显然不是一个理由。

你正在使用哪个版本? 比&&更具可读性吗? 还是没有区别?




根据您使用的语言,通常最好使用&&|| 而不是andor ,除了像Python这样的语言,其中andor被用来代替&&|| 不存在。




为了安全起见,我总是将我的比较加上括号并将它们分开。 这样,我不必依赖运营商的优先权:

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的原因是因为赋值运算符优先于任何逻辑运算符,因为在其他答案中已经很好地解释了它。