2012-07-15 18 views
5

Hice algunas pruebas con cadenas usando '=='. Sé que comparar cadena '==' no es el camino, pero hay un comportamiento extraño que quiero resolver.Comparación de cadenas PHP usando '=='

Estoy siguiendo la documentación de PHP en esta página: http://www.php.net/manual/en/language.operators.comparison.php. Esta es la prueba que hice

<?php 
    var_dump("100" == "1e2"); //outputs boolean true 
    var_dump((int) "100"); //int 100 
    var_dump((int) "1e2"); //int 1 
?> 

La documentación dice cuando comparamos las cadenas con números, PHP primero convierte la cadena de números, pero cuando convierto '100' y '1e2' a los números que no son iguales. La comparación debería dar como resultado booleano falso.

¿Por qué es este comportamiento extraño? ¡Gracias!

+0

Por cierto, esta es la razón por la que generalmente es mejor usar '===' en lugar de '==', ¡ya que el resultado es mucho más predecible! –

Respuesta

6

No todos los números son enteros. 1e2 es un flotante (que resulta ser representable como un entero, pero no es directamente convertible a un número entero). Intenta convertir a float s en lugar de int s:

<?php 
    var_dump("100" == "1e2"); // bool(true) 
    var_dump((float) "100"); // float(100) 
    var_dump((float) "1e2"); // float(100) 
?> 
+1

Para ampliar esto, esta es la explicación en los documentos. http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion "Si la cadena no contiene ninguno de los caracteres '.', 'e', ​​o ' E 'y el valor numérico se ajusta a los límites de tipo entero (como se define en PHP_INT_MAX), la cadena se evaluará como un entero. En todos los demás casos se evaluará como un flotante ". –

1

Type Juggling no es igual a Type Casting

Desde la página de Manipulación de Tipos

Si alguno de los operandos es un flotador, a continuación, se evalúan los dos operandos como flotadores, y el resultado será un flotador. De lo contrario, los operandos se interpretarán como enteros, y el resultado también será un número entero.

Cuestiones relacionadas