Üç parametre ile davayı Switch?

7 Cevap

Bu gibi anahtar-davasında üç parametre, kullanmak mümkündür:

switch($var1, $var2, $var3){
    case true, false, false:
        echo "Hello";
        break;
}

Eğer değilse, if-else ben sadece kullanabilir veya daha iyi bir çözüm var ki?

7 Cevap

Sözdizimi doğru değil ve ben o olsa bile, bunu tavsiye etmem. Eğer really böyle bir yapı kullanmak istiyorsanız Ancak, bir diziye değerleri koyabilirsiniz:

switch (array($var1, $var2, $var3)) {
    case array(true, false, false):
        echo "hello";
        break;
}

Burada bir anahtar durum yok. Sen bir çok durum var:

if($var && !($var2 || $var3)) { ...

Ben sadece if / else kullanmak istiyorsunuz

if($var1 == true && $var2 == false && $var3 == false){
    echo "Hello";
}

veya

if($var1 && !($var2 && $var3)) {
    echo "Hello";
}

i sözdizimi geçerli olduğunu sanmıyorum.

Ben yuva switch ifadeleri olur.

Başka bir seçenek, bir tamsayı üç parametre haritalar ve switch deyimi kullanan bir işlev oluşturmak için.

function MapBool($var1, $var2, $var3){
    // ...
}

switch(MapBool($var1, $var2, $var3)) {
    case 0: 
        echo "Hello";
        break;
   // ...

}

Bu bit operatörleri tarafından ele alınması için kullanılan türden bir şey olduğunu:

if (($var1 << 2) & ($var2 << 1) & $var3) == 4) ...

Lütfen ... 'gerçek' 1 iken.

Söyleniyor, yukarıdaki özlü, ancak okumak ve korumak oldukça zor. Eğer benzer tabloların bir sürü varsa Bununla birlikte, değişen / AND'lenmesi şeyleri kontrol altında almak için gitmek için bir yol olabilir:

switch (($var1 << 2) & ($var2 << 1) & $var3)) {
   case 0: // false, false, false
       ...stuff...
   case 1: // false, false, true
       ...different stuff...
   // all 8 cases if you REALLY care
}

Bilmiyorum - Eğer gerçekten bu şekilde istiyorum - belki dize hepsini döküm birleştirmek ve daha sonra dava durumda sonuç dizesi kullanabilir?