"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué la comparación entre cadenas sueltas y números enteros de PHP a veces arroja resultados inesperados?

¿Por qué la comparación entre cadenas sueltas y números enteros de PHP a veces arroja resultados inesperados?

Publicado el 2024-12-23
Navegar:996

Why Does PHP's Loose String-to-Integer Comparison Sometimes Return Unexpected Results?

Comparación de cadenas con números enteros: explicación de fenómenos poco comunes

En PHP, comparar cadenas con números enteros a veces puede producir resultados extravagantes. Esta confusión surge del comportamiento de comparación flexible de PHP, específicamente cuando se comparan cadenas con el valor 0.

Considere el siguiente código:

$test1 = "d85d1d81b25614a3504a3d5601a9cb2e";
$test2 = "3581169b064f71be1630b321d3ca318f";

if ($test1 == 0)
  echo "Test 1 is Equal!?";
if ($test2 == 0)
  echo "Test 2 is Equal!?";

Sorprendentemente, el resultado de este código es:

Test 1 is Equal!?

¿Por qué ocurre esto? ?

Según la documentación PHP sobre conversión de cadenas a números, cuando una cadena se evalúa en un contexto numérico (como una comparación), se convierte a un flotante o un número entero según su contenido. Si la cadena contiene caracteres como '.', 'e' o 'E', se trata como un flotante. De lo contrario, se considera un número entero.

En el caso de $test1, la cadena no contiene ningún carácter numérico y por lo tanto se convierte al valor entero 0. Es por eso que la comparación $test1 == 0 evalúa a verdadero.

¿Por qué $test2 no funciona?

$test2 también comienza con caracteres no numéricos, entonces, ¿por qué no? ¿También es igual a 0? Esto se debe a que la cadena contiene el carácter '3' al principio. Según la documentación de PHP, un número válido comienza con un signo (opcional) seguido de dígitos. Por lo tanto, $test2 se convierte en un flotante con un valor de 0, y la comparación $test2 == 0 se evalúa como falsa.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3