PHP - 和/或关键字

时间:2010-12-21 17:25:12

标签: php conditional

&&与“和”相同,并且||与PHP中的“或”相同吗?

我做了一些测试,看起来它们表现得一样。有什么不同吗?

如果没有,是否有任何其他PHP标志具有等效字,你认为它使代码更容易阅读吗?

4 个答案:

答案 0 :(得分:36)

andor 低于&&|| 。更准确地说,&&||的优先级高于赋值运算符(=),而andor的优先级更低。

http://www.php.net/manual/en/language.operators.precedence.php

通常它没有什么区别,但有些情况下,不知道这种差异会导致一些意外的行为。请参见此处的示例:

http://php.net/manual/en/language.operators.logical.php

答案 1 :(得分:6)

是的,它们在逻辑上是一样的。 (我相信“&&”和“||”是Zend coding standards中的首选,但我找不到任何具体的信息,所以它可能都是一个梦想。或者其他什么。 )

那说:

  1. “&安培;&安培;”和“||”是higher precedence比“AND”和“OR”(不太可能相关,但你永远不知道)。

  2. 许多其他语言使用“&&”和“||”,而不是文本等价物,所以这可能是一个想法。

  3. 只要你一直使用你选择的一组操作符就没那么重要。

答案 2 :(得分:3)

困扰我的是:

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

你可能猜测只有可能的输出为“1”(真),因为没有可能输出错误的情况......但它会是“”(假)。

使用&&作为这种情况下的运营商,至少满足了我的期望:

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

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

答案 3 :(得分: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中所述。 (在其他答案中提到,但我认为值得详细说明,因为误用会导致逻辑错误)

我希望它可以帮到你。您可以在http://php.net/manual/en/language.operators.logical.php

找到更多信息
相关问题