Php 逻辑运算符,| |或?
我记得不久前读到过关于逻辑运算符的文章,在Php 逻辑运算符,| |或?,php,operators,logical-operators,or-operator,Php,Operators,Logical Operators,Or Operator,我记得不久前读到过关于逻辑运算符的文章,在或的情况下,使用|优于或(反之亦然) 当它回到我的项目中时,我不得不在我的项目中使用它,但我不记得推荐了哪个操作员,或者它是否是真的 哪个更好?为什么?我不认为一种语言天生比另一种更好,但我建议坚持使用| |,因为这是大多数语言的默认设置 编辑:正如其他人所指出的,两者之间确实有区别。没有“更好”,但更常见的是|。它们具有不同的功能,|将正常工作 另请参见:(以下示例取自此处): 它们用于不同的目的,事实上有不同的运营商先例。&&和|运算符用于布尔条件,
或
的情况下,使用|
优于或
(反之亦然)
当它回到我的项目中时,我不得不在我的项目中使用它,但我不记得推荐了哪个操作员,或者它是否是真的
哪个更好?为什么?我不认为一种语言天生比另一种更好,但我建议坚持使用| |,因为这是大多数语言的默认设置 编辑:正如其他人所指出的,两者之间确实有区别。没有“更好”,但更常见的是
|
。它们具有不同的功能,|
将正常工作
另请参见:(以下示例取自此处):
它们用于不同的目的,事实上有不同的运营商先例。
&&
和|
运算符用于布尔条件,而和和或运算符用于控制流
例如,以下是布尔条件:
if ($foo == $bar && $baz != $quxx) {
这与控制流不同:
doSomething() or die();
没有什么不好或更好的,它只是取决于运算符的优先级。由于|
的优先级高于或
,因此主要使用|
。来源:
下面是使用逻辑运算符的示例代码:
<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>
合乎逻辑
一些语言使用短路,而另一些语言使用完全布尔求值(如果您知道,这类似于Pascal中的指令$B
)
说明:
function A(){
...Do something..
return true;
}
function B(){
...Do something..
return true;
}
if ( A() OR B() ) { .....
在本例中,永远不会执行函数B()。由于函数A()
返回TRUE,因此OR语句的结果从第一部分就知道了,而无需计算表达式的第二部分
但是,对于(A()| B())
,无论第一个部分的值是多少,第二个部分始终进行计算
对于优化编程,应始终使用速度更快的或(第一部分返回false
的情况除外,第二部分实际需要评估)。分别使用| |和或&&and和之间的差异为:
$bool=FALSE | | TRUE代码>
- 解释为
($bool=(FALSE | | TRUE))
$bool
的值为TRUE
$bool=FALSE或TRUE代码>
- 解释为
($bool=FALSE)或TRUE)
$bool
的值为FALSE
$bool=TRUE&&FALSE代码>
- 解释为
($bool=(真与假))
$bool
的值为FALSE
$bool=TRUE和FALSE代码>
- 解释为
($bool=TRUE)和FALSE)
$bool
的值为TRUE
我知道这是一个老话题,但仍然是。我刚刚在工作中调试的代码中遇到了问题,可能有人也有类似的问题
假设代码如下所示:
$positions = $this->positions() || [];
当$this->positions()返回false或null时,$positions是空数组,这是您在javascript中经常看到的。但事实并非如此。该值为TRUE或FALSE取决于$this->positions()返回的内容
如果需要获取$this->positions()或空数组的值,则必须使用:
$positions = $this->positions() 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";
因此,当您想要设置返回值或空数组时,实际上第三个选项?:
是正确的解决方案
$positions = $this->positions() ?: [];
使用PHP7.2.1测试die()
如果doSomething()
返回false
或null
,将调用函数?如果doSomething()
返回true
或什么都不返回怎么办?doSomething()
作为布尔值计算。如果它返回一个值(true
,一个非空字符串,等等),它将不会调用die()
。$e=true | |$x='foo'
将不会定义$x
,因为短路,而不是因为优先级更高。还值得注意的是,它们总是返回一个布尔值,与许多其他语言不同,它们返回最后检查的值。所以在PHP中(27 | | 0)返回true,而不是27。@TextGeek,“这些”27或0
为我返回27
。@Jānis Elmeris--你是对的,我应该只提到“| |”的情况。@TextGeek,事实上,或
也返回布尔值,你是对的。只是它的优先级太低,有时看起来像做了其他事情print27或0
将打印27
,因为或发生在print27
之后。顺便说一句,echo
不会被愚弄–echo 27或0
会输出1
。这不是“最佳答案!!”。请向上滚动并获取投票最多的答案,以获得良好的解释。使用|
,将不会调用B
。这两个操作符的作用完全相同,只是优先级不同。“你应该总是使用或哪个更快”嗯,我想知道这是不是真的。。。让我们检查一下:操作码的数量是相同的。因此,从性能角度来看,这并不重要。答案是错误的,第二个示例与第一个示例完全相同one@WayFarer嗯,这是不正确的(有一个问题),但您也错了(| |和或不一样)-请参见我的editright,运算符| | |和“或”具有不同的优先级,因此,您的第二个示例的工作方式是:($second=returnEmpty()或[]);所以,原始问题的答案是| |更好,始终使用它,直到您真正理解为什么要使用“或”$positions=$this->positions()??[];代码>是
bool(false)
NULL
array(0) {
}
$positions = $this->positions() ?: [];