2011-04-08 13 views
8

Me gustaría pasar múltiples valores en una sola caja de interruptor. Me doy cuenta de que no es posible de la manera en que trato de hacerlo. ¿Hay alguna otra manera, salvo colocar cada caso en su línea?Cambiar declaración> ¿es posible incluir múltiples coincidencias de casos en un solo caso?

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

default: 
return 950; 
} 
+0

¿Qué? Por supuesto, PHP no tiene funciones que se encuentran en lenguajes avanzados como Bash –

Respuesta

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

creo que esto es lo más cerca que se puede conseguir.

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

    default: 
    return 950; 
} 

Editado con corrección.

+0

. Dado que cada elemento genera un rendimiento, tampoco se necesitan declaraciones de interrupción. En su lugar, le sugiero que establezca una variable en 850 o 950 aquí en caso de que necesite el valor dentro de la función después del hecho posterior, y luego tendrá una sola declaración de retorno, que es un estándar de psuedo discutible. – Horus

1

¿Qué tal esto

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

    default: 
     return 950; 
} 
2

A menos que utilice break; en su caso, la ejecución simplemente cae en el siguiente caso. Usted puede usar esto para su ventaja mediante el apilamiento de cada uno de los casos juntos, por ejemplo:

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

Porque no hay break; en el caso 'test1', cuando la ejecución termina en ese caso (es decir, inmediatamente, ya que no hay lógica en él), el control caerá luego al caso 'test2', que terminará en su declaración break.

En este caso, el break ni siquiera es necesario para estos casos, ya que la declaración return se ocupará de romper el switch por sí mismo.

+0

+1 para la sugerencia sobre la eliminación de las declaraciones de interrupción. ¡Gracias! –

2

Dentro de la estructura del interruptor no creo que haya ninguna forma de hacer algo como 'o' en una línea. esta sería la forma más sencilla:

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

    default: 
    return 950; 
} 

Pero, sobre todo si sólo se devuelve un valor y no la ejecución del código, que recomendaría haciendo lo siguiente:

$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 para la solución de matriz – drudge

+0

también puede usar ternario si prefiere el if/else 'return in_array ($ get_opt, $ switchTable)? $ switchTable [$ get_opt]: 950; ' –

+0

+1 Parece interesante. Voy a darle un giro. –

Cuestiones relacionadas