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 :
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!