Anahtar durumda 0?

3 Cevap php

Belki aptal soru için üzgünüm, ama 0 (sıfır) değeri ile bazı int değişkeni olduğunda ben bir davayla BÜYÜK sorun var.

            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;

Anahtarı daha devam eder, ancak burada benim sorunum bu kod parça vardır.

"(0) durumda:" Bu kullanabilirsiniz i dont koymak eğer:

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

Sonra yanındaki dava şekilde aktif hale gelecektir ve bu yazdıracaktır "$ eko_taksa = 667;".

Bu eser üzerinde bu durumda daha az sonra 6 herhangi bir sayı olduğu zaman zaman "$ starost_vozila = 0" Tüm sorun ama.

Burada her var int. Her zaman "$ starost_vozila = 0" and when i use "case ($ starost_vozila> = 0 && $ starost_vozila <6):" ok dışında çalışır.

Ben Oo ... ne olup bittiğini hiçbir fikrim yok

Maalesef bu aptal soru ise. (

3 Cevap

anahtar durumlarda değerlendirilmesi gerekir ifadeleri yapmayız. Bunlar basit dizeleri, booleans veya karşı Karşılaştırılacak numaralarını almak

böylece söylüyorlar

$x = 0

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

Eğer çalıştırmak için bu davayı bekliyoruz ama değildi ve neden burada yok

( $x < 10 ) evaluates to true so what you actually have is:

$x = 0

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

0 != true bu yüzden dava başarısız

Eğer kullanmanız gerekir

if() {

} else if() {

} else {

}

Sen switch yanlış kullanıyorsunuz.

Sizin kod şöyle anlaşılmaktadır:

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;
    }
}

Örneğin, ($starost_vozila < 6) ya olacaktır TRUE ya da FALSE. $starost_vozila == ($starost_vozila < 6) yapmak istediğiniz ne değildir ki, $starost_vozila ya TRUE veya FALSE ile karşılaştırıyor.

Bu durumda, if / elseif yerine switch ile göstermektedir. Örneğin:

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

Anahtarı kullanarak "ifadesi ise" değil, === (türü için onay yoktur) == gibidir. Sadece boş dize veya null bir tamsayı 0 neden olur - bu başka, onlar dize 0 olarak kabul edilir.