Переключить регистр с тремя параметрами? - PullRequest
9 голосов
/ 25 августа 2009

Можно ли использовать три параметра в распределительном шкафу, например:

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

Если нет, я должен просто использовать if-else или есть лучшее решение?

Ответы [ 7 ]

22 голосов
/ 25 августа 2009

Синтаксис неправильный, и я бы не стал его рекомендовать, даже если бы это было так. Но если вы действительно хотите использовать такую ​​конструкцию, вы можете поместить свои значения в массив:

switch (array($var1, $var2, $var3)) {
    case array(true, false, false):
        echo "hello";
        break;
}
3 голосов
/ 25 августа 2009

Я бы просто использовал if / else

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

или

if($var1 && !($var2 && $var3)) {
    echo "Hello";
}
3 голосов
/ 25 августа 2009

У вас здесь нет ситуации переключения. У вас есть несколько условий:

if($var && !($var2 || $var3)) { ...
1 голос
/ 25 августа 2009

Это то, что раньше обрабатывалось побитовыми операторами:

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

... назад, когда 'true' было 1.

Как говорится, вышесказанное лаконично, но его довольно сложно читать и поддерживать. Тем не менее, если у вас много похожих утверждений, сдвиг / AND может стать способом контроля над ситуацией:

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
}
1 голос
/ 25 августа 2009

Другой вариант - создать функцию, которая отображает три параметра в целое число и использовать их в операторе switch.

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

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

}
1 голос
/ 25 августа 2009

Я не думаю, что ваш синтаксис действителен.

Я бы вложил операторы switch.

0 голосов
/ 25 августа 2009

Я не знаю - если вы действительно хотите это таким образом - возможно, приведите их все к строке, объедините и затем используйте полученную строку в вашем случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...