逻辑运算符,||还是OR?

时间:2011-05-13 22:15:03

标签: php operators logical-operators or-operator

我记得有一段时间关于逻辑运算符的回顾,在OR的情况下,使用||优于or(反之亦然)。

当我回到我身边时,我不得不在我的项目中使用它,但我不记得推荐哪个运算符,或者它是否真实。

哪个更好,为什么?

8 个答案:

答案 0 :(得分:125)

没有“更好”,但更常见的是||。他们有不同的precedence||可以正常工作。

另请参阅:Logical operators以下示例取自):

// 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;

答案 1 :(得分:39)

它们用于不同的目的,实际上具有不同的运算符优先级。 &&||运算符用于布尔条件,而andor用于控制流。

例如,以下是布尔条件:

if ($foo == $bar && $baz != $quxx) {

这与控制流程不同:

doSomething() or die();

答案 2 :(得分:17)

分别为||的区别和OR和&& AND是operator precedence

$bool = FALSE || TRUE;

  • 解释为($bool = (FALSE || TRUE))
  • $bool的值为TRUE

$bool = FALSE OR TRUE;

  • 解释为(($bool = FALSE) OR TRUE)
  • $bool的值为FALSE

$bool = TRUE && FALSE;

  • 解释为($bool = (TRUE && FALSE))
  • $bool的值为FALSE

$bool = TRUE AND FALSE;

  • 解释为(($bool = TRUE) AND FALSE)
  • $bool的值为TRUE

答案 3 :(得分:5)

来源:http://bit.ly/1hxDmVR

以下是使用逻辑运算符的示例代码:

<html>

<head>
<title>Logical</title>
</head>
<body>
<?php
$a=10;
$b=20;
if($a>$b)
{
    echo " A is Greater";
}
elseif($a<$b)
{
    echo " A is lesser";
}
else
{
     echo "A and B are equal";
}
?>
<?php
    $c=30;
    $d=40;
   //if(($a<$c)AND($b<$d))
   if(($a<$c)&&($b<$d))
   {
       echo "A and B are larger";
   }
   if(isset($d))
       $d=100;
   echo $d;
   unset($d);
?>
<?php
    $var1=2;
    switch($var1)
    {
        case 1:echo "var1 is 1";
               break;
        case 2:echo "var1 is 2";
               break;
        case 3:echo "var1 is 3";
               break;
        default:echo "var1 is unknown";
    }
?>
</body>
</html>

答案 4 :(得分:1)

我知道这是一个古老的话题但仍然存在。我刚刚在工作中调试的代码中遇到了问题,也许有人可能有类似的问题...

让我们说代码如下:

$positions = $this->positions() || [];

你会期望(因为你习惯于从例如javascript),当$ this-&gt; positions()返回false或null时,$ positions是空数组。但它不是。值为TRUE或FALSE取决于$ this-&gt; positions()返回的内容。

如果你需要获得$ this-&gt; positions()或空数组的值,你必须使用:

$positions = $this->positions() or [];

修改

上面的示例并没有按预期工作,但事实是||or不一样......试试这个:

<?php

function returnEmpty()
{
  //return "string";
  //return [1];
  return null;
}

$first = returnEmpty() || [];
$second = returnEmpty() or [];
$third = returnEmpty() ?: [];

var_dump($first);
var_dump($second);
var_dump($third);
echo "\n";

结果如下:

bool(false)
NULL
array(0) {
}

因此,当您想要设置返回值或空数组时,实际上第三个选项?:是正确的解决方案。

$positions = $this->positions() ?: [];

使用PHP 7.2.1进行测试

答案 5 :(得分:0)

我认为一个本身并不比另一个好,但我建议坚持使用||因为它是大多数语言的默认值。

编辑:正如其他人指出的那样,两者之间确实存在差异。

答案 6 :(得分:0)

没有什么不好或更好,它只取决于运营商的优先级。由于||的优先级高于or,因此主要使用||

答案 7 :(得分:-3)

某些语言使用短路,其他语言使用完整的布尔值评估(如果你知道,这类似于pascal中的指令$B

说明:

function A(){
 ...do somethings..
 return true;
}

function B(){
 ...do somethings..
 return true;
}

if ( A() OR B() ) { .....

在此示例中,永远不会执行函数B()。由于函数A()返回TRUE,因此从第一部分可以知道OR语句的结果,而无需评估表达式的第二部分。

但是对于( A() || B() ),无论第一部分的值如何,都会始终评估第二部分。

对于优化编程,您应始终使用更快的OR(第一部分返回false且第二部分实际需要评估的情况除外)。