0

短路问题问我已经知道了。但我想知道为什么它在这里不起作用。由于并行处理或流水线,短路是否有一些影响。

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

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

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

问题: && 是否作为短路运算符工作。也就是说

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

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

cond2即使cond1失败,PHP 也会进行评估。

你能解释一下 && 在 PHP 中是如何工作的吗?

基准

使用上面的代码,如果执行大约 61000 次。整个网站执行需要 27 秒。

使用嵌套条件大约 10000 次执行condtion2

$feeds大约有 1700 个条目,其中$filtered392 个条目。

谢谢

4

1 回答 1

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”。如果更改><,您将看到“已调用函数”和“如果为真”。

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

于 2013-09-14T22:24:30.420 回答