If语句是否会停止检查PHP中是否满足第一个OR条件?

时间:2015-05-11 12:41:44

标签: php

我想尝试使我的代码尽可能高效,并从我读过的内容

if($process == true)

处理速度比调用函数的速度快。即

if(count($total) == 100) 

所以如果我在if中有一个OR并且第一个条件是一个简单的布尔检查并且结果是真的,那么条件的第二部分仍然会被检查吗?

例如

$process = true;
if($process == true || count($total) == 100)

即使进程为真,仍然会调用count函数,这足以使条件通过。

5 个答案:

答案 0 :(得分:5)

PHP确实有一个名为短路的机制: http://php.net/manual/en/language.operators.logical.php#example-140

如果逻辑OR的第一个操作数为真,则第二个部分不被评估,并且该函数不被调用。

由于将变量与布尔值进行比较比在PHP中调用函数更快,因此这种机制可以帮助您进行优化,但永远不要忘记过早优化是所有邪恶的根源。

答案 1 :(得分:1)

它将完全与逻辑运算符一样工作。例如,永远不会调用foo()。

if (false && foo()) {

}

if (true  || foo()) {

}

答案 2 :(得分:0)

(我记得这来自C#,但我很确定它在php中是一样的)

这取决于你使用单个|还是双||我认为如果你使用单个{仍然会继续使用另一个(当有一个像loggin这样的函数时有用)如果你使用double并且第一个是真的,它将跳过第二个条件。

(这可能是另一种方式,所以最好的办法是尝试使用Javascript,例如。创建2个函数,每个函数在警告某些东西后返回true,并且这些函数用1行或2)

答案 3 :(得分:0)

如果OR一旦找到真实的陈述,它就不会检查其他条件,

如果AND发现了错误陈述,则不会检查其他条件。 它被称为懒惰评估

<强>说明

<?php
$var=0;
if($var++ || $var++){//Since 0 means false in Php both conditions will be checked
//Do nothing
}
echo $var;//output :2

如果我们将条件更改为if(++$var || $var++),则第一个条件将返回true,因此不会检查下一个条件,因此它将输出打印为1;

答案 4 :(得分:0)

如果a或其中的任何语句为true,则不会检查其他语句,if将被评估为true。

如果您正在检查a和语句,则所有语句都需要评估为true,如果其中任何一个为false,则stamen检查将停止,因为if已经为false。

另一个重要的细节是if中的一个函数不会减慢if检查,减慢的是函数正在做什么,如果它需要大量处理当然会比检查一个布尔值慢但不要害怕使用功能,因为它们在任何系统中都非常重要。