在PHP中,&&
与“and”是否相同,||
与“or”是否相同?
我进行了一些测试,它们似乎表现相同。有什么区别吗?
如果没有区别,是否还有其他PHP符号有单词等价物,并且您认为这样做能使代码更易于阅读?
在PHP中,&&
与“and”是否相同,||
与“or”是否相同?
我进行了一些测试,它们似乎表现相同。有什么区别吗?
如果没有区别,是否还有其他PHP符号有单词等价物,并且您认为这样做能使代码更易于阅读?
and
和 or
的优先级低于 &&
和 ||
。更确切地说,&&
和 ||
优先级高于赋值运算符(=
),而 and
和 or
的优先级较低。
http://www.php.net/manual/en/language.operators.precedence.php
通常情况下不会有什么区别,但有些情况下不了解这种差异可能会导致一些意外行为。请参见此处的示例:
=
有不同的优先级。 - Thomas Langston我所困扰的是:
echo (false and false ? true : true);
// (empty/false)
您可能猜测,由于没有可以输出false的情况,只有可能输出“1”(true)...但实际上输出将是“”(false)。
在这种情况下使用&&作为运算符至少满足了我的期望:
echo (false && false ? true : true);
// 1
区别在于优先级不同。但不仅仅是相互之间的比较!
在大多数情况下,您可能不会介意它,但在特定情况下,您必须退一步看整个情况。例如:
// 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(虽然其他回答中已经提到过,但我认为有必要详细说明,因为误用可能导致逻辑错误)。
&&
是AND,但&
是AND(按位)。同样,||
和|
分别是OR和OR(按位)。::我收回了,PHP允许使用AND/OR单词-令人惊讶。每天都会学到新东西。 - Brad Christie||
和&&
更易读,但我预计其他人可能会有不同看法。请遵循你所处环境的约定。 - Thomas Langston&&
和OR
,而不是||
,因为“在某些输出设备上其清晰度较低”。哈哈。 - Gras Double