"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que a comparação entre strings e números inteiros do PHP às vezes retorna resultados inesperados?

Por que a comparação entre strings e números inteiros do PHP às vezes retorna resultados inesperados?

Publicado em 23/12/2024
Navegar:690

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

Comparação de strings com números inteiros: fenômenos incomuns explicados

Em PHP, comparar strings com números inteiros às vezes pode gerar resultados peculiares. Essa confusão decorre do comportamento de comparação frouxo do PHP, especificamente ao comparar strings com o valor 0.

Considere o seguinte código:

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

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

Surpreendentemente, a saída deste código é:

Test 1 is Equal!?

Por que isso ocorre ?

De acordo com a documentação do PHP sobre conversão de string em números, quando uma string é avaliada em um contexto numérico (como uma comparação), ela é convertida em um float ou inteiro com base em seu conteúdo. Se a string contiver caracteres como '.', 'e' ou 'E', ela será tratada como um ponto flutuante. Caso contrário, é considerado um número inteiro.

No caso de $test1, a string não contém nenhum caractere numérico e, portanto, é convertida para o valor inteiro 0. É por isso que a comparação $test1 == 0 avalia para verdadeiro.

Por que $test2 não funciona?

$test2 também começa com caracteres não numéricos, então por que também não é igual 0? Isso ocorre porque a string contém o caractere '3' no início. De acordo com a documentação do PHP, um número válido começa com um sinal (opcional) seguido de dígitos. Assim, $test2 é convertido em um float com valor 0, e a comparação $test2 == 0 é avaliada como false.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3