开关盒中的0?

时间:2010-02-13 22:11:11

标签: php switch-statement

对不起可能是愚蠢的问题,但是当我有一些值为0(零)的int变量时,我遇到了一个巨大的问题。

            switch ($starost_vozila){
                case (0):
                    switch ($podaci['tip_motora']){
                        case ("motor1"):
                            $eko_taksa = 485;
                        break;
                        case ("motor2"):
                            $eko_taksa = 243;
                        break;
                        case ("motor3"):
                            $eko_taksa = 121;
                        break;
                        case ("motor4"):
                            $eko_taksa = 194;
                        break;
                    }
                break;
                case ($starost_vozila < 6):
                    switch ($podaci['tip_motora']){
                        case ("motor1"):
                            $eko_taksa = 485;
                        break;
                        case ("motor2"):
                            $eko_taksa = 243;
                        break;
                        case ("motor3"):
                            $eko_taksa = 121;
                        break;
                        case ("motor4"):
                            $eko_taksa = 194;
                        break;
                    }
                break;
                case ($starost_vozila > 5 && $starost_vozila < 11):
                    switch ($podaci['tip_motora']){
                        case ("motor1"):
                            $eko_taksa = 667;
                        break;
                        case ("motor2"):
                            $eko_taksa = 273;
                        break;
                        case ("motor3"):
                            $eko_taksa = 136;
                        break;
                        case ("motor4"):
                            $eko_taksa = 218;
                        break;
                    }
                break;

切换继续更多,但这是我的问题,在这段代码中。

如果我不把“case(0):”并使用它:

case ($starost_vozila >= 0 && $starost_vozila < 6):

然后下一个案例将以某种方式变为活动状态,并打印出“$ eko_taksa = 667;”。

当“$ starost_vozila = 0”时,这是所有问题,但是当它比上述情况少于6时,任何数字都有效。

这里的每个var都是int。一切正常,除非“$ starost_vozila = 0”,当我使用“case($ starost_vozila&gt; = 0&amp;&amp; $ starost_vozila&lt; 6)时:”。

我不知道发生了什么...... Oo

对不起,如果这是一个愚蠢的问题。 :(

3 个答案:

答案 0 :(得分:8)

switch case不接受需要评估的语句。他们将简单的字符串,布尔值或数字与

进行比较

所以说你有

$x = 0

switch( $x ) {
    case( $x < 10 ):
    ...
    break;
}

你期待这种情况能够运行,但事实并非如此,这就是为什么

( $x < 10 )评估为true 所以你实际拥有的是:

$x = 0

switch( $x ) {
    case true: //!!!
    ...
    break;
}

0 != true所以案件失败

你需要使用

if() {

} else if() {

} else {

}

答案 1 :(得分:3)

您错误地使用了switch

您的代码理解如下:

if ($starost_vozila == 0) {
    switch ($podaci['tip_motora']){
        case ("motor1"):
            $eko_taksa = 485;
        break;
        case ("motor2"):
            $eko_taksa = 243;
        break;
        case ("motor3"):
            $eko_taksa = 121;
        break;
        case ("motor4"):
            $eko_taksa = 194;
        break;
    }
} else if ($starost_vozila == ($starost_vozila < 6)) { //not what you want!!!
    switch ($podaci['tip_motora']){
        case ("motor1"):
            $eko_taksa = 485;
        break;
        case ("motor2"):
            $eko_taksa = 243;
        break;
        case ("motor3"):
            $eko_taksa = 121;
        break;
        case ("motor4"):
            $eko_taksa = 194;
        break;
    }
} else if ($starost_vozila == ($starost_vozila > 5 && $starost_vozila < 11)) { //not what you want!!!
    switch ($podaci['tip_motora']){
        case ("motor1"):
            $eko_taksa = 667;
        break;
        case ("motor2"):
            $eko_taksa = 273;
        break;
        case ("motor3"):
            $eko_taksa = 136;
        break;
        case ("motor4"):
            $eko_taksa = 218;
        break;
    }
}

例如,($starost_vozila < 6)将成为TRUEFALSE$starost_vozila == ($starost_vozila < 6)正在将$starost_vozilaTRUEFALSE进行比较,这不是您想要做的。

我建议在这种情况下使用if / elseif而不是switch。例如:

if ($starost_vozila == 0) {
    ...
} else if ($starost_vozila < 6) {
    ...
} else if ($starost_vozila > 5 && $starost_vozila < 11) {
    ...
}

答案 2 :(得分:0)

使用Switch就像“if语句”中的==而不是===(不检查类型)。只有空字符串或NULL才会产生整数0 - 除此之外,它们被认为是字符串0。