2011-04-08 16 views
8

Vorrei passare più valori in un singolo caso di commutazione. Mi rendo conto che non è possibile nel modo in cui sto cercando di farlo. C'è un altro modo, a parte mettere ogni caso sulla sua linea?Istruzione switch> possibile includere più corrispondenze case in un singolo caso?

switch(get_option('my_template')) 
{ 
case 'test1', 'test2': 
return 850; 
break; 

default: 
return 950; 
} 
+0

Cosa? Ovviamente PHP non ha caratteristiche trovate in linguaggi così avanzati come Bash –

risposta

24
switch(get_option('my_template')) { 
    case 'test1': 
    case 'test2': 
     return 850; 
     break;  
    default: 
     return 950; 
} 
1

credo che questo sia il più vicino si può ottenere.

switch(get_option('my_template')) 
{ 
    case 'test1': 
    case 'test2': 
    return 850; 
    break; 

    default: 
    return 950; 
} 

Modificato con correzione.

+0

Dato che ogni elemento fa un ritorno, non c'è nemmeno bisogno di istruzioni break. Vorrei invece suggerire di impostare una variabile a 850 o 950 qui nel caso in cui sia necessario il valore all'interno della funzione dopo il fatto successivo, e quindi si avrà solo una dichiarazione di ritorno, che è un discutibile psuedo-standard. – Horus

1

ne dite di questo

switch(get_option('my_template')) 
{ 
    case 'test1': 
    case 'test2': 
     return 850; 
     break; 

    default: 
     return 950; 
} 
2

Se non si utilizza break; sul tuo caso, l'esecuzione appena cade il prossimo caso. È possibile utilizzare questo a vostro vantaggio impilando ciascuno dei vostri casi insieme, ad esempio:

switch(get_option('my_template')) { 
    case 'test1': 
    case 'test2': 
    return 850; 
    break; 
    default: 
    return 950; 
} 

Perché non c'è break; sul caso 'test1', quando l'esecuzione termina il quel caso (cioè immediatamente, dal momento che non v'è alcun logica in esso), il controllo passerà quindi al caso 'test2', che terminerà con la sua istruzione break.

In questo caso, lo break non è nemmeno necessario per questi casi, dal momento che la dichiarazione return si prenderà cura dello scompartimento di switch da solo.

+0

+1 per il suggerimento sulla cancellazione delle dichiarazioni di interruzione. Grazie! –

2

All'interno della struttura di switch non credo che ci sia un modo di fare qualcosa come un 'o' su una riga. questo sarebbe il modo più semplice:

switch(get_option('my_template')) 
{ 
    case 'test1': 
    case 'test2': 
    return 850; break; 

    default: 
    return 950; 
} 

Ma, soprattutto se si sta solo restituendo un valore e non l'esecuzione di codice, io consiglierei di fare il seguente:

$switchTable = array('test1' => 850, 'test2' => 850); 
$get_opt = get_option('my_template'); 
if in_array($get_opt, $switchTable) 
    return $switchTable[$get_opt]; 
else return 950; 
+0

+1 per la soluzione array – drudge

+0

può anche usare ternario se si preferisce il if/else 'return in_array ($ get_opt, $ switchTable)? $ switchTable [$ get_opt]: 950; ' –

+0

+1 Sembra interessante. Gli darò un giro. –

Problemi correlati