Maison >développement back-end >tutoriel php >Pourquoi la comparaison d'une chaîne à 0 en PHP renvoie-t-elle parfois vrai et parfois faux ?

Pourquoi la comparaison d'une chaîne à 0 en PHP renvoie-t-elle parfois vrai et parfois faux ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 16:23:12408parcourir

Why Does Comparing a String to 0 in PHP Sometimes Return True and Sometimes Return False?

Comprendre la curieuse comparaison entre une chaîne et un entier

De nombreux programmeurs sont intrigués par le comportement du code PHP suivant :

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

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

Étonnamment, ce code affiche "Le test 1 est égal !?" seulement. Pourquoi cela se produit-il ?

Comparaison lâche et conversion de chaîne en nombre

La clé pour comprendre ce comportement réside dans le mécanisme de comparaison lâche de PHP. Lors de la comparaison d'une chaîne à un entier à l'aide de l'opérateur ==, PHP tente de convertir la chaîne en nombre.

Selon le manuel PHP, la conversion d'une chaîne en nombres suit ces règles :

  • Si la chaîne contient un point décimal, un exposant ou un caractère « e », elle est interprétée comme un flottant.
  • Sinon, elle est interprétée comme un entier.

Dans le cas de $test1, la comparaison $test1 == 0 évalue la chaîne $test1 comme un entier, ce qui donne 0. Ainsi, elle satisfait à la condition d'égalité et produit " Le test 1 est égal !?"

Exception à la règle

Cependant, dans le Dans le cas de $test2, la conversion de l'entier échoue car elle contient un caractère non valide, « b ». En conséquence, PHP convertit $test2 en 0 dans le contexte entier, rendant la comparaison $test2 == 0 fausse.

Conclusion

L'incohérence apparente dans la comparaison des chaînes en nombres entiers est résolu en comprenant les règles de comparaison lâches de PHP et son mécanisme de conversion chaîne en nombre. Lors de la comparaison de chaînes à 0, les règles de conversion dictent si la comparaison sera vraie ou fausse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn