2011-04-19 30 views
1

通常当我写PHP我建条件语句是这样的:使用和或条件中的可读性代替&& ||

if(1 === $var1 
    and 2 === $var2 
    or 1 == $var3) { 
    // do something here maybe 
} 

我认为这使他们更容易和更自然的阅读。 我知道,当我使用Yodas时,这可能是可笑的。

我的每条条件都在andor之前,因为它使得在调试时更容易注释部分语句。

与“常用”||&&相比,这样做有什么不利吗?

+0

单独的线就是一种不错的。但是,这与'和'vs'&&',或'或'vs'||'有什么关系? '&&'运算符比'和'具有更高的优先级,所以使用它们是不等价的。 – dnagirl 2011-04-19 16:26:42

+0

@dnagirl你是对的,与这个问题完全没有关系,只是想在那里解释它。 – Treffynnon 2011-04-19 16:34:34

回答

2

and&&之间以及or||之间没有显着的PHP功能差异。

它们之间的唯一区别是它们被视为不同的运算符,并且按照运算符优先级的顺序具有不同的位置。如果你忽略了用括号括起来,这会对复杂操作的结果产生很大的影响。由于这个原因,使用一种或其他风格的操作符并坚持使用它,而不是在相同的代码库中混合使用这两种操作符(这对于可读性来说也是一个好主意)通常是个不错的主意。但是选择使用哪一对运营商是非常重要的。

除此之外,它们基本上是一样的东西。

看到这里的PHP运算符优先级:http://php.net/manual/en/language.operators.precedence.php

(注意在andor VS &&||的表中的不同位置)

+1

我认为不同的运算符优先级是一个重要的功能差异。特别是因为一个比分配更高的优先级,而另一个更低。这意味着'$ a = $ b和$ c'与'$ a = $ b && $ c'完全不同意义 – 2011-04-19 16:45:59

+0

@Frank:我同意这很重要,我同意重要的是要知道区别。我不会称之为*功能*不同,因为这两个操作员的独立功能是相同的。但我想这只是一个语言论证。我们基本同意了,我已经给出了答案+1。 – Spudley 2011-04-19 18:36:23

6

orand不具有相同的运算符优先级||&&。这意味着对于表达式[a][b][a] and [b] != [a] && [b]的某些值。这可能会产生不明显的错误。

PHP operator precedence

注意,一个比分配的优先级较高,而另一个则不是。这是一个微妙的差异,即使你了解它,其他开发人员阅读你的代码可能不会。因此,我个人推荐只使用&&||

Ruby的操作符在这方面与PHP相似。 Jay Fields published a simple example of the difference

+2

也许不仅仅是在一起吗?如果你觉得有必要使用'和'来使用'或',那么成对使用时应该保持一致,以避免微妙,难以捕捉到错误。 – Trufa 2011-04-19 16:37:41

+0

同意:最好选择一对并坚持下去。混淆两者,或者上帝禁止,出于审美原因替换另一个是你遇到麻烦的地方。 – 2011-04-19 16:43:11

+0

有趣的是,'xor'没有符号运算符,所以在这种情况下你必须使用named运算符。我并不使用'xor',但如果你这样做,那么它可能会影响你为了一致性而选择使用哪种风格。 – Spudley 2011-04-19 18:40:35