逻辑运算符|| 或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;
它们用于不同的目的,实际上有不同的运算符优先级。 &&
和||
运算符用于布尔条件,而and
和or
用于控制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)
-
$bool
是FALSE
$bool = TRUE && FALSE;
- 解释为
($bool = (TRUE && FALSE))
-
$bool
是FALSE
$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
和第二部分实际需要评估的情况)。