首页 > 解决方案 > switch/case 和 if else 的行为不同

问题描述

我有以下代码

<?php

declare (strict_types = 1); // strict requirement

function fun1(int $interval)
{
    $retVal = -10;
    switch ($interval) {
        case ($interval <= 45):
            $retVal = 5;
            break;
        case ((90 <= $interval) && ($interval <= 100)):
            $retVal = 1;
            break;
    }
    return $retVal;
}

function fun2(int $interval)
{
    $retVal = -10;
    if ($interval <= 45){
        $retVal = 5;
    }
    elseif((90 <= $interval) && ($interval <= 100)){
        $retVal = 1;
    }
    return $retVal;
}

echo "FUN1";
echo "<br>";
echo fun1(0); // expected: 5 returned: 1 - ???
echo "<br>";
echo fun1(20); // expected: 5 returned: 5
echo "<br>";
echo fun1(95); // expected: 1 returned: 1
echo "<br>";

echo "FUN2";
echo "<br>";
echo fun2(0); // expected: 5 returned: 5
echo "<br>";
echo fun2(20); // expected: 5 returned: 5
echo "<br>";
echo fun2(95); // expected: 1 returned: 1
echo "<br>";

?>

返回:

FUN1
1
5
1
FUN2
5
5
1

为了得到缘故,我无法弄清楚为什么fun1(0)返回 1 而不是 5

标签: php

解决方案


推荐阅读