Escribo código para una tabla ordenable, donde al hacer clic en los enlaces del encabezado cambia el ORDEN BY ejecutado al generar un conjunto de resultados de búsqueda (el caso donde no hay orden válido por causas la consulta no debe ejecutarse con el pedido y solo devuelve los resultados en el orden en que la base de datos retorna. Esto es como se diseñó). El código se está escribiendo dentro de un marco provisto por mi empleador.Comportamiento extraño en una declaración de interruptor
Para validar la parte ORDER BY de la consulta, ejecuto la entrada a través de la siguiente función de validación.
<?php
function sortMode ($name)
{
$mode = '';
switch ($name)
{
case 'resnum' : $mode = 'b_resnum'; break;
case 'state' : $mode = 'st_id'; break;
case 'name' : $mode = 'lastname, firstname'; break;
case 'phone' : $mode = 'phone'; break;
case 'email' : $mode = 'email'; break;
case 'opened' : $mode = 'cs_created'; break;
default : $mode = ''; break;
}
return ($mode);
}
?>
En las pruebas, descubrí que si no se proporcionaba ningún parámetro, el orden de clasificación sería resnum. Después de un poco de experimentación, descubrí que el filtrado integrado en el marco provocaría una solicitud de una variable no inicializada, como un parámetro GET no establecido para devolver el entero 0. Si el código anterior se alimentaba con un entero 0 como su entrada, siempre seguiría al primero camino de ejecución disponible para él.
Como experimento Intenté cambiar el orden de los casos en la sentencia switch, y encontré lo que estaba en la parte superior sería lo que se ejecutará si esta función se aprobó un 0.
La solución al problema era usando switch (strval($name))
por lo que el problema particular está resuelto, pero ahora tengo curiosidad en cuanto al comportamiento general de las instrucciones de conmutación de PHP. ¿Es el comportamiento que presencié el comportamiento correcto para PHP? ¿Hay algún error en PHP que está causando esto o he cometido un error en mi código del cual no estoy al tanto?
+1 dang! Este es un comportamiento peligroso. –
PHP puede ser pura maldad. Esta conversión int automática ha causado más frustración que el tiempo "guardado". – GWW
Al menos en un si se puede usar === y evitar esto, pero lamentablemente el interruptor/caso es un == – UnkwnTech