2012-01-12 7 views
9
switch(false) { 
    case 'blogHitd': 
     echo('ddd'); 
     break; 
    case false: 
     echo('bbbb'); 
     break; 
    default: 
     echo 'alert("error action");'; 
} 

salida ------- ------¿Por qué "cambiar (verdadero) {}" en PHP con una lógica extraña?

bbbb

switch(true) { 
    case 'blogHitd': 
     echo('ddd');   
     break; 
    case true: 
     echo('bbbb'); 
     break; 
    default: 
     echo 'alert("error action");'; 
} 

------- una salida extraña ---- ---

ddd

¿Por qué cuando paso el valor de true siempre seleccionará el primero?

+0

lo entiendo ahora, todos – qidizi

+0

¡Me alegra ayudarme! Sería útil para los futuros usuarios que leen esto para aceptar una respuesta, por lo que, si pudieran hacerlo, ¡sería genial! –

Respuesta

16

De la documentación de PHP en Booleans:

Al convertir a booleano, los siguientes valores se consideran FALSO:

  • la propia FALSO boolean
  • el número entero 0 (cero)
  • el flotador 0,0 (cero)
  • la cadena vacía, y la cadena "0"
  • una matriz con cero elementos
  • un objeto con variables miembro cero (PHP 4 solamente)
  • el especial tipo NULL (incluyendo variables no definidas
  • objetos SimpleXML creados a partir de etiquetas vacías

Cualquier otro valor se considera VERDADERO (incluido cualquier recurso).

La última frase de este pasaje citado es la línea de interés en su caso.

+0

Gracias por la edición, Oli. Intentaba limpiarlo al mismo tiempo, pero tú me ganaste. ¡Hice clic en el botón equivocado cuando pegué el texto! –

9

conmutación "verdadera" sólo es útil si usted tiene funciones o variables en el "caso" línea de

switch(true) 
{ 
    case is_array($array): 
    echo 'array'; 
    break; 
    default: 
    echo 'something else'; 
    break; 
} 
+1

En mi caso, esto es lo que estaba haciendo la persona en el código que heredé. Una manera tan extraña de hacer las cosas. –

3

PHP encasillado valores para usted, no se olvide:

php > var_dump(true == 'bloghitd'); 
bool(true) 
+0

Probablemente usas [phpsh] (http://www.phpsh.org). ¿No? – Apostle

1

En este escenario el interruptor sólo se ejecuta el primer caso válido.

Es útil en caso de que tenga más de una respuesta posible pero desea ejecutar solo la primera.Por ejemplo:

switch(true){ 
case 1 == 2: 
    echo '1 == 2'; 
    break; 

case 2 == 2: 
    echo '2 == 2'; 
    break; 

case 3 == 3: 
    echo '3 == 3'; 
    break; 

case 4 == 1: 
    echo '4 == 1'; 
    break; 
} 

La salida: 2 == 2

Tanto el segundo y tercer casos son verdaderas, pero que sólo reciben el segundo (que es la primera TRUE).

+1

Ese es el rol de "descanso", quítelo y ¡continúa! –

Cuestiones relacionadas