php($ foo> 0)或($ foo> = 1)

时间:2012-11-23 15:20:03

标签: php

我总是想知道在检查数字是1还是更大时最佳做法是什么。

IF($foo > 0)

OR

IF($foo >= 1)

我应该使用哪一个?它们看起来都是一样的。

5 个答案:

答案 0 :(得分:3)

最终正确的是:

if ($foo >= 1) { }

它清晰,简洁,适用于您抛出的任何数字类型(所有这两种类型)。

以下是仅整数比较的一些替代方案;顺便说一句,它们都没有产生更好的性能(事实)或可读性(在我看来)。

if ($foo) { 
    // anything that's not zero, regardless of sign
}

if ($foo != 0) {
    // same as above, but forces the left operand to be casted to number
}

if ($foo > 0) {
    // anything that's above zero and therefore greater or equal to one
}

答案 1 :(得分:3)

                     -1      0       0.5      1
IF($foo > 0)         false   false   true     true
IF($foo >= 1)        false   false   false    true
IF($foo)             true    false   true     true

答案 2 :(得分:0)

如果您的要求是检查值是否大于或等于1 ,则此处甚至没有做出决定。从逻辑上和语义上讲,唯一选项为x >= 1

答案 3 :(得分:0)

这取决于您使用的是整数还是浮点数。

根据性能优势选择一个是没有意义的。

在看到Jelmer的说法之后,我写了一个基准来测试并看看是否存在有意义的差异。

以下是我运行的基准测试的确切代码:

<?php

echo '&gt;= VS &gt;<br/>';

for($j = 0; $j < 100; $j++)
{

    $start = microtime(true);

    for($i = 1000000; $i > 0; $i--)
    {

    }

    $midpoint = microtime(true);

    for($i = 1000000; $i >= 1; $i--)
    {

    }

    $end = microtime(true);

    $with_equals = $end - $midpoint;
    $no_equals = $midpoint - $start;

    echo $with_equals.' VS '.$no_equals.'<br/>';

    if($with_equals < $no_equals)
    {
        $with_equals_wins++;
    }
    elseif($with_equals > $no_equals)
    {
        $no_equals_wins++;
    }

}

echo '<br/>TOTAL WINS<br/>&gt;= - '.$with_equals_wins.' VS &gt; - '.$no_equals_wins;

在运行Windows 7 x64和XAMPP 1.7.3的英特尔i7 Sandy Bridge笔记本电脑上,我运行了几次基准测试并获得了以下结果:(我确保关闭Turbo Boost,以便CPU时钟稳定)

TOTAL WINS
>= - 26 VS > - 74

TOTAL WINS
>= - 21 VS > - 79

TOTAL WINS
>= - 22 VS > - 78

请注意,我的结果与Jelmer的结果相反。

如果存在任何甚至稍微有意义的性能差异,那么它可能取决于代码运行的特定硬件和软件环境。

答案 4 :(得分:-1)

在性能方面,您希望使用>=代替>

我的伪基准:

for 100000x {
    time result of 5 > 0
}

for 100000x {
    time result of 5 >= 1
}

编辑:正如评论中的威廉建议计时整个for循环,这正是发生的事情。我把所有的时间加在一起,这给了我完全相同的结果,一次定时整个for循环。所以基本上我做了同样的事情。 (仅供参考。我以威廉为他的建议进行基准测试,结果相同。相信我,我是工程师)

我的结果:

          >                 >=
x100000 | 198.63224029541 | 191.68829917908
In MS

所以,当谈到速度而你正在使用整数时(参见上面的好答案!),>=会更快。但是,考虑后果!它只有7ms100.000次测试。但是,当你有几百万条记录要检查时......

修改

经过几次基准测试之后,我得到了更大的差异。像1015甚至20 ms这样的差异!什么都没有改变,显然我的处理器很忙,但很高兴和你们分享。