我已经知道短线问题。但我想知道它为什么不在这里工作。由于并行处理或流水线操作,短路会产生一些影响。
我的代码遇到了非常奇怪的情况。代码看起来像这样
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
$feeds
约有1700个条目,其中$filtered
为392个条目。
由于
答案 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”。如果您将>
更改为<
,则会看到“已调用函数”和“如果为真”。
我不确定你是如何确定你的表达式是否被评估,因为它们没有明显的副作用。