我有一个代码库,开发人员决定使用AND和OR,而不是&&和||。
我知道运算符的优先级是不同的(&&在和之前),但对于给定的框架(准确地说是PrestaShop),这显然不是一个原因。
你用的是哪个版本?and比&&更易读?还是没有区别?
我有一个代码库,开发人员决定使用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框架中看到的每一次这种情况。
其他回答
因为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
你用的是哪个版本?
如果我正在为之编写代码的特定代码库的编码标准指定了应该使用哪个操作符,那么我肯定会使用它。如果不是,并且代码规定了应该使用哪个(不经常使用,可以很容易地解决),那么我将使用它。否则,可能是&&。
“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框架中看到的每一次这种情况。
为了安全起见,我总是用圆括号括起来,并将它们分隔开。这样,我就不必依赖运算符优先级:
if(
((i==0) && (b==2))
||
((c==3) && !(f==5))
)
这里有一个小反例:
$a = true;
$b = true;
$c = $a & $b;
var_dump(true === $c);
输出:
bool(false)
我想说的是,这种打字错误更有可能导致潜在的问题(与= vs ==相同),而且比adn/ro打字错误更不容易被注意到,后者会被标记为语法错误。我还发现and/or更容易阅读。总之,大多数PHP框架表达了首选项(大多数没有)指定and/or。我也从来没有遇到过一个真实的、不做作的情况,在这种情况下它会很重要。