逻辑运算符|| 或OR?

我还记得一段时间,在逻辑运算符方面,在OR的情况下,使用|| 比(或者反过来)更好。

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

哪个更好?为什么?

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

另请参阅: 逻辑运算符以下示例从此处获取 ):

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

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

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

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

这与控制stream程不同:

 doSomething() or die(); 

||之间的区别 和OR和&&和AND是运算符优先级

$bool = FALSE || TRUE;

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

$bool = FALSE OR TRUE;

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

$bool = TRUE && FALSE;

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

$bool = TRUE AND FALSE;

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

资料来源: 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> 

我不认为一个本质上比另一个更好,但我会build议坚持|| 因为这是大多数语言的默认设置。

编辑:正如其他人指出的那样,两者确实有所不同。

没有什么不好或者更好,这只取决于运营商的优先级。 由于|| 具有比or更高的优先权 主要是使用。

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

假设代码如下所示:

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

你会期望(因为你是从例如JavaScript),当$ this-> positions()返回false或null,$ positions是空数组。 但事实并非如此。 值为TRUE或FALSE取决于$ this-> positions()返回的值。

如果您需要获取$ this-> positions()或空数组的值,则必须使用:

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

有些语言使用短路,其他语言使用全布尔评估(如果您知道,这与pascal中的指令$B类似)

说明:

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

在这个例子中,函数B()永远不会被执行。 由于函数A()返回TRUE,所以OR语句的结果是从第一部分得知的,而不需要评估expression式的第二部分。

然而,对于( A() || B() ) ,第二部分总是被评估,而不pipe第一部分的值如何。

为了优化编程,你应该总是使用更快的OR (除了第一部分返回false和第二部分实际需要评估的情况)。