2011-05-02 15 views
7

Decir que tengo algo como esto:Saltar a otro caso en sentencia switch PHP

switch ($_GET['func']) { 
    case 'foo': 
     dobar(); 
     break; 
    case 'orange': 
     if ($_GET['aubergine'] == 'catdog') { 
      // **DO DEFAULT OPTION** 
     } else { 
      dosomethingElse(); 
     } 
     break; 
    default: 
     doDefault(); 
} 

¿Cómo puedo saltar al caso default desde el punto marcado en case 'orange'?

+1

¿Por qué no puedes simplemente llamar a 'doDefault()'? – Hammerite

+1

Me reí sinceramente de '$ _GET ['berenjena'] == 'catdog''. Es una maravillosa denominación que estás teniendo allí. –

Respuesta

9

Probar:

switch($_GET['func']) { 
    case 'foo': 
    dobar(); 
    break; 

    case 'orange': 
    if($_GET['aubergine'] != 'catdog') { 
     dosomethingElse(); 
     break; 
    } 

    default: 
    doDefault(); 
} 
+0

Sí, eso es lo que tenía en mente :) aplausos – felamaslen

+0

Gracias por esta respuesta, es lo que estaba buscando y me impidió tener que publicar una pregunta. ¡Gracias! Muy apreciado. – Chezshire

+1

A veces hago lo mismo. Cuando lo hago, normalmente agrego un comentario "// Fallthrough" donde debería estar la ruptura de mayúsculas y minúsculas, para que yo (y otras personas que miran el código) sepa que se hizo a propósito, no solo un quiebre accidentalmente perdido. – OMA

9

Yo Dawg, se puede utilizar una nueva característica interesante llamada la goto.

<?php 
$func = "orange"; 
function doDefault() { echo "yeehaw!"; return; } 
function dobar() { return; } 
function dosomethingElse() { return; } 

switch ($func) { 
    case 'foo': 
     dobar(); 
     break; 
    case 'orange': 
     if (true) { 
      goto defaultlabel; 
     } else { 
      dosomethingElse(); 
     } 
     break; 
    default: 
    defaultlabel: 
     doDefault(); 
} 
+1

Usted puede pero muchos programadores gritarían algo sobre escribir código de espagueti: p P.S: Upvoted para el "Yo dawg". –

+0

En resumen, recuerdo la primera vez que tuve que desaprender el comando goto. No quiero ir allí de nuevo! Creo que el principal problema aquí es cómo funciona realmente SWITCH. En mi opinión, debería poder simplemente omitir el salto, y luego se ejecutaría el valor predeterminado. Sin embargo, PHP ejecutará cada comando después de un caso exitoso, incluso si es en otro caso. Eso para mí es extraño. – Puzbie

+0

@Puzbie esto sucede porque la instrucción 'switch' a pesar de tener un uso similar con' if', es básicamente un contenedor para una forma conveniente de construcción de operador 'goto'. Aunque sus 'etiquetas' ('caso XX:') no son las mismas etiquetas de 'goto' y ** no podemos ** usar' goto' para saltar a mayúsculas o minúsculas. – user7808407

Cuestiones relacionadas