0

我有一个关于 PHP 如何在条件中评估 OR 运算符的性能相关问题。

我有一个调用 2 个函数的条件,它们都返回布尔值:

第一个是一个简单、快速的函数——simpleFunction()

第二个是查询数据库的更密集的函数 - intensiveFunction()

我可以这样写条件,这样如果第一个简单函数返回 TRUE,则不会执行第二个更密集的函数:

if ( simpleFunction() ) {
   // Do Stuff
} elseif ( intensiveFunction() ) {
   // Do the same stuff (redundant code)
}

我的问题是,在 PHP 条件中使用 and OR 运算符时,如果第一个条件(运算符左侧)为 TRUE,是否会执行第二个函数(运算符右侧)?

if ( simpleFunction() || intensiveFunction() ) {
    //Do Stuff
}

这个条件将在循环内运行,所以我想避免在每次迭代时运行 intensiveFunction()。

4

3 回答 3

6

相信一旦在or操作中找到了一个truthy ,那么语句就会结束并返回true

而在and操作中,它会一直运行,直到找到 false。

于 2013-08-13T22:42:58.753 回答
2

另外比较这个脚本测试各种逻辑运算符:

<pre>
<?php
function test($bool) {
    echo "I was executed\n";

    return $bool;
}

echo "<b>||-Operator</b>\n";
if (test(true) || test(true)) {
    ;
}

echo "<b>|-Operator</b>\n";
if (test(true) | test(true)) {
    ;
}

echo "<b>or-Operator</b>\n";
if (test(true) or test(true)) {
    ;
}

echo "<b>&&-Operator</b>\n";
if (test(false) && test(true)) {
    ;
}

echo "<b>&-Operator</b>\n";
if (test(false) & test(true)) {
    ;
}

echo "<b>and-Operator</b>\n";
if (test(false) and test(true)) {
    ;
}
?>
</pre>

输出:

||-Operator
I was executed
|-Operator
I was executed
I was executed
or-Operator
I was executed
&&-Operator
I was executed
&-Operator
I was executed
I was executed
and-Operator
I was executed

请注意 | 并且 & 总是执行第二部分,即使输出不再为真(&-Operator)或不再为假(|-Operator)。

于 2013-08-13T23:07:48.783 回答
0

正如尼尔指出的那样,我应该测试一下:

$hasRun = 'Intesive Function Has NOT Run';

function simpleFunction() {
    return TRUE;    
}

function intensiveFunction() {
    $hasRun = 'Intesive Function Has Run';  
    return TRUE;
}

if ( simpleFunction() || intensiveFunction() ) {
    echo $hasRun;   
}

//Result: Intesive Function Has NOT Run function

所以是的,一旦第一个条件返回 TRUE,条件退出并且第二个条件不被评估。

于 2013-08-13T22:58:32.610 回答