PHP - and/or关键字

22

在PHP中,&&与“and”是否相同,||与“or”是否相同?

我进行了一些测试,它们似乎表现相同。有什么区别吗?

如果没有区别,是否还有其他PHP符号有单词等价物,并且您认为这样做能使代码更易于阅读?


老VB程序员,嗯?是的,&&是AND,但&是AND(按位)。同样,|||分别是OR和OR(按位)。::我收回了,PHP允许使用AND/OR单词-令人惊讶。每天都会学到新东西。 - Brad Christie
1
@Alex:啊,Pascal/Delphi的日子。我是多么讨厌,呃,我是说我是多么爱那些日子... - Brad Christie
为什么几乎所有的PHP程序员都选择符号而不是单词呢?只是因为使用&&可以节省1个字符吗? - Alex
3
在这种情况下,可读性主要是观察者的主观感受。我认为||&&更易读,但我预计其他人可能会有不同看法。请遵循你所处环境的约定。 - Thomas Langston
CodeIgniter使用&&OR,而不是||,因为“在某些输出设备上其清晰度较低”。哈哈。 - Gras Double
显示剩余2条评论
4个回答

38

1
http://php.net/manual/en/language.operators.php 上的评论表明它们相对于 = 有不同的优先级。 - Thomas Langston
@Thomas:这也在我的答案的第一个链接中有记录;但是...实际上这可能是最重要的区别。我会把它加到答案中。 - Mchl
1
“or” 运算符的优先级低于赋值运算符,这个特性非常有用:$page = get_page() or $page = 1; - Michał Tatarynowicz
2
@Pies 但那样太糟糕了,我宁愿在这种情况下使用三元运算符,或者更好的是,在 get_page() 函数内部处理。 - o0'.

7
是的,它们在逻辑上是相同的。(我相信"&&"和"||"是Zend编码标准中首选的选择,但我找不到具体信息,所以这可能都是一个梦。或者什么别的。)
尽管如此:
1. "&&"和"||"的优先级更高比"AND"和"OR"(可能永远不会有影响,但你永远不知道)。 2. 许多其他语言使用"&&"和"||",而不是文本等价物,因此可能想要采用这种方式。 3. 只要您始终使用您选择的运算符集,就没有太大关系。

如果“=”(赋值)的优先级在这两个运算符之间,这可能会产生很大的差异 - 实际上就是这种情况!(http://php.net/manual/en/language.operators.precedence.php) - Peter Mortensen

5

我所困扰的是:

echo (false and false ? true : true);
// (empty/false)

您可能猜测,由于没有可以输出false的情况,只有可能输出“1”(true)...但实际上输出将是“”(false)。

在这种情况下使用&&作为运算符至少满足了我的期望:

echo (false && false ? true : true);
// 1

因此,在某些情况下,使用方法非常重要。

4

区别在于优先级不同。但不仅仅是相互之间的比较!

在大多数情况下,您可能不会介意它,但在特定情况下,您必须退一步看整个情况。例如:

// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;

// The constant true is assigned to $h before the "and" operation occurs
// Acts like: (($h = true) and false)
$h = true and false;

var_dump($g, $h);

这将分别产生:

bool(false)
bool(true)

换句话说,&& 的优先级高于 =,后者的优先级又高于 and。详见http://php.net/manual/en/language.operators.precedence.php(虽然其他回答中已经提到过,但我认为有必要详细说明,因为误用可能导致逻辑错误)。
希望这能帮到你。更多内容请参阅http://php.net/manual/en/language.operators.logical.php

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接