PHP if if语句在性能方面的最坏情况

时间:2014-02-03 14:26:01

标签: php

function quadrant($x,$y) {

if( $x >= 0 && $y >= 0 )
    $result = "point ($x,$y) lies in the First quandrant";
else if( $x < 0 && $y >= 0)
    $result = "point ($x,$y) lies in the Second quandrant";
else if( $x < 0 && $y < 0)
    $result = "point ($x,$y) lies in the Third quandrant";
else if( $x >= 0 && $y < 0)
    $result = "point ($x,$y) lies in the Fourth quandrant";

return $result;

}

$x=1;
$y=1;
$q = quadrant($x,$y);

在性能方面,最差的$ x或$ y值是多少?和多少比较?

在性能方面,$ x或$ y的价值是多少?和多少比较?

1 个答案:

答案 0 :(得分:0)

这只是一个计算问题。

最佳情况:x和y均为非负数。 2次比较($x >= 0$y >= 0)。

最坏情况:x非负和y负。 6个比较。这是因为如果第一个语句已经&&,php将停在false,因为无论第二个语句返回什么结果,结果都不可能是true。因此,在if被评估为假之后,第二个和第三个$x<0已经停止评估 此外,最后if是完全没必要的,只是在“最坏”的情况下增加了2个比较。删除它并只留下else会使这种情况下降到4并使“x和y都为负”是最糟糕的情况,进行5次比较。

这是一个更高效的版本:

function quadrant($x,$y) {

    if( $x >= 0 ) {
        if( $y >= 0)
            return "point ($x,$y) lies in the First quandrant";
        else
            return "point ($x,$y) lies in the Fourth quandrant";
    }
    else if( $y >= 0)
        return "point ($x,$y) lies in the Second quandrant";
    else
        return "point ($x,$y) lies in the Third quandrant";

}

这总是有2次比较。