2011-05-09 25 views
12

Estoy bastante seguro de que esto es un simple defecto fundamental en mis conocimientos de PHP Novato, pero se sorprendió cuando ocurrió lo siguiente:comparación de cadenas en un bool

enter image description here

$result es TRUE ... así ¿Por qué se considera igual a la cadena "correo electrónico"? Supongo que esto se debe a que, técnicamente, es bool y no es falso. Entonces, cuando se compara con una cadena (por ejemplo, "correo electrónico"), devuelve verdadero.

¿Debo cambiar mi método para devolver como resultado string que contiene "verdadero" (en lugar de return true; en caso de éxito), o hay otra forma en que debería estar haciendo esto?

Gracias.

+1

Por favor, solo pegue el código en lugar de una captura de pantalla. – TJHeuvel

+2

@TJ, La razón por la que publiqué una captura de pantalla es porque muestra el contenido de '$ result', y también porque pasó la prueba condicional. Además, es literalmente tres líneas de código. –

+0

AH! no es mi código ir en contra de las leyes de programación, ¡es solo PHP! –

Respuesta

14

Sí, true es igual (==) a una cadena no vacía. No idéntico (===) sin embargo.

Le sugiero que lea detenidamente el type comparison table.

+0

Excelente. Muchas gracias. –

+0

+1 por mencionar la identidad –

+0

¡No es completamente correcto! La cadena vacía ("") y la cadena cero ("0") se consideran FALSAS. ¡Todos los demás son VERDADEROS! –

1

if($result === "email") hará el truco pero personalmente nunca iría de esta manera.

+0

¿De qué manera sugerirías? –

+0

¿Por qué nunca irías de esa manera? – meze

+0

personalmente iría con 2 variables. uno para un resultado válido, otro para un error previamente definido. Mejora la legibilidad del código, pero creo que es puramente un estilo de codificación personal. Debería haber dejado esta anotación. – DanielB

3

Devuelve verdadero porque php intentará convertir algo para poder compararlos. En este caso, probablemente intente convertir la cadena en el lado derecho a un bool, que será cierto en este caso. Y cierto == verdadero es, por supuesto, cierto.

Al hacer $ result === "email" (triple =) le dices a PHP que no debería hacer conversiones y debería devolver falso si los tipos no coinciden.