Mudar caso com três parâmetros?

É possível usar três parâmetros no switch-case, como este:

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

Caso contrário, eu deveria usar sim, ou existe uma solução melhor?

A syntax não está correta e eu não recomendaria, mesmo que fosse. Mas se você realmente deseja usar uma construção como essa, você pode colocar seus valores em uma matriz:

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

Eu simplesmente usaria o if / else

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

ou

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

Você não tem uma situação de mudança aqui. Você tem uma condição múltipla:

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

Eu não acho que sua syntax é válida.

Eu nidaria as declarações do switch.

Outra opção é criar uma function que mapeie três parâmetros para um inteiro e use isso na instrução switch.

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

Este é o tipo de coisa que costumava ser manipulada por operadores bit-bit:

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

... de volta quando "verdadeiro" era 1.

Dito isto, o acima é conciso, mas é muito difícil de ler e manter. No entanto, se você tem muitas afirmações semelhantes, mudar / ANDing pode ser uma maneira de controlar as coisas:

 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 } 

Eu não sei – se você realmente quiser dessa maneira – talvez os jogue todos para seqüenciar, concatenar e usar a cadeia resultante na condição do seu caso?