119

我记得前段时间读过关于逻辑运算符的内容,在 的情况下OR,使用||优于or(反之亦然)。

当它回到我身边时,我只需要在我的项目中使用它,但我不记得推荐了哪个操作员,或者它是否是真的。

哪个更好?为什么?

4

8 回答 8

158

没有“更好”,但更常见的是||. 它们具有不同的优先级,并且||会像人们期望的那样正常工作。

另请参阅:逻辑运算符以下示例取自那里):

// 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;
于 2011-05-13T22:17:56.250 回答
49

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

例如,以下是一个布尔条件:

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

这与控制流不同:

doSomething() or die();
于 2011-05-13T22:20:32.877 回答
32

分别||的区别 and OR and && and AND 是运算符优先级

$bool = FALSE || TRUE;

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

$bool = FALSE OR TRUE;

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

$bool = TRUE && FALSE;

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

$bool = TRUE AND FALSE;

  • 解释为(($bool = TRUE) AND FALSE)
  • 的值$boolTRUE
于 2016-01-18T06:38:05.037 回答
5

来源:http ://wallstreetdeveloper.com/php-logical-operators/

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

<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>
于 2014-05-07T18:03:55.393 回答
3

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

假设代码如下所示:

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

您会期望(就像您习惯于使用例如 javascript 一样)当 $this->positions() 返回 false 或 null 时,$positions 是空数组。但事实并非如此。值是 TRUE 还是 FALSE 取决于 $this->positions() 返回的内容。

如果您需要获取 $this->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 测试

于 2017-11-13T13:37:34.370 回答
0

没有什么不好或更好,它只取决于运算符的优先级。由于||优先级高于or,所以||主要使用。

于 2011-09-29T17:13:58.217 回答
0

我不认为一个天生就比另一个更好,但我建议坚持 || 因为它是大多数语言的默认设置。

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

于 2011-05-13T22:17:36.940 回答
-4

一些语言使用短路,而其他语言使用完整的布尔评估(如果你知道,这类似于$BPascal 中的指令)。

说明:

function A(){
    ...Do something..
    return true;
}

function B(){
    ...Do something..
    return true;
}

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

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

然而( A() || B() ),无论第一部分的值如何,都会对第二部分进行评估。

为了优化编程,您应该始终使用OR哪个更快(除了第一部分返回false而第二部分实际需要评估的情况)。

于 2014-10-05T14:54:13.477 回答