switch

18 views
Skip to first unread message

Victor Hugo Mm

unread,
Jun 19, 2018, 5:01:02 PM6/19/18
to PHP Latinoamérica
Estimados buenas tardes.

Por qué este código me da como resultado "Mayor a 1" ?

<?php
$numDatos = 0;
switch ($numDatos){
    case ($numDatos > 1):
        echo "Mayor a 1";
        break;
    case ($numDatos < 1):
        echo "Menor a 1";
        break;
    case ($numDatos == 1):
        echo "Igual a 1";
        break;
}
?>

Juan Andrés Peón

unread,
Jun 20, 2018, 9:00:39 AM6/20/18
to phplatin...@googlegroups.com
Porque estás evaluando la variable del switch ($numDatos) contra el valor del case ($numDatos > 1). $numDatos == 0 y $numDatos > 1 == false. La comparación que hace es no estricta así que 0 == false es true y caes en el primer caso.
Reexplico, switch-case lo que hace es evaluar lo que pasas como parámetro al switch contra cada uno de los case, en tu código lo que chequea es $numDatos == ($numDatos > 1) y si es truthy (porque la evaluación no es estricta así que no tiene por qué ser true o false, por ejemplo 0 vale como false) se ejecuta el código del case.

Lo podés reescribir así:

switch (true){
    case ($numDatos > 1):
        echo "Mayor a 1";
        break;
    case ($numDatos < 1):
        echo "Menor a 1";
        break;
    case ($numDatos == 1):
        echo "Igual a 1";
        break;
}

Ahí caes en el primer caso que de true, o sea, hace true == ($numDatos > 1) que es true == false para el valor de 0 y va dar false. Va a hacer true == ($numDatos < 1) que es true == true para valor de 0 así que ahí se queda.

Se entendió?

--
Has recibido este mensaje porque estás suscrito al grupo "PHP Latinoamérica" de Grupos de Google.
Visita este grupo en https://groups.google.com/group/phplatinoamerica.

Victor Hugo Mm

unread,
Jun 20, 2018, 9:52:30 AM6/20/18
to PHP Latinoamérica
Entendido, con ese cambio ya funciona, gracias.

Luis Gonzálo Hernández Giraldi

unread,
Jul 3, 2018, 10:46:52 AM7/3/18
to phplatin...@googlegroups.com
No sabia esa forma...
Eso me permitiría usar switch para comprobar distintas variables, no solo una...


Gracias
Atento a vuestros comentarios

Luis Gonzalo Hernández Giraldi
Analista de Sistemas Computacionales 
Abjurar
​ ​
Renegar de una creencia u opinión con juramento



Reply all
Reply to author
Forward
0 new messages