PHP中的短路逻辑和并行处理问题的影响

时间:2013-09-14 22:16:20

标签: php loops conditional-statements

我已经知道短线问题。但我想知道它为什么不在这里工作。由于并行处理或流水线操作,短路会产生一些影响。

我的代码遇到了非常奇怪的情况。代码看起来像这样

foreach($feeds as $k=>$feed)
{
foreach($filtered as $item)
{
 if(($feed['object'] == $item['object']) && (($feed['time']-$item['time'])<10))
   {
   Code....
   }
  }
 }

当我将两个条件都放在同一个If()块中时,它们都会被比较。 但是当我把它们放在嵌套的块中时,它们需要更少的时间来执行。

问题: 和&amp;&amp;作为短路操作员工作。这意味着

如果$feed['object'] == $item['object']失败

($feed['time']-$item['time'] < FEED_TIME)将不会被评估。

即使cond2失败,看起来PHP也会评估cond1

你能解释一下&amp;&amp;实际上在PHP中工作。

基准

使用上面的代码,if执行大约61000次。花了27秒执行整个网站。

对于condtion2

,嵌套条件约为10000次执行

$feeds约有1700个条目,其中$filtered为392个条目。

由于

1 个答案:

答案 0 :(得分:2)

&&||是PHP中的短路运算符。您可以通过以下测试看到它:

if (0 > 1 && func()) {
    echo "If is true\n";
} else {
    echo "If is false\n";
}

function func() {
    echo "Function called\n";
    return true;
}

如果你运行它,你应该看到“If is false”,但不是“Function called”。如果您将>更改为<,则会看到“已调用函数”和“如果为真”。

我不确定你是如何确定你的表达式是否被评估,因为它们没有明显的副作用。