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.
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