Maison >développement back-end >tutoriel php >Pourquoi la comparaison lâche de types PHP conduit-elle à des résultats inattendus lors de la comparaison de chaînes et d'entiers ?
Anomalie de comparaison d'une chaîne à un entier
Lorsque vous comparez une chaîne à un entier en PHP, vous pouvez rencontrer des résultats inattendus. Considérez le code suivant :
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?"; // Returns: Test 1 is Equal!?
Étonnamment, la comparaison $test1 est évaluée comme vraie, malgré sa valeur non numérique. Cette anomalie provient des règles de conversion de type lâches de PHP.
Conversion de chaîne en nombres
Selon le manuel PHP :
"Quand une chaîne est évaluée dans un contexte numérique, la valeur et le type résultants sont déterminés comme suit :
La valeur est donnée par la partie initiale de la chaîne. Si la chaîne commence par des données numériques valides, ce sera la valeur utilisée. Sinon, la valeur sera 0. (zéro)."
Expliquer l'anomalie
Dans l'exemple fourni, $test1 ne contient aucun point décimal, exposant ou zéro non significatif. Par conséquent, il est interprété comme un entier avec une valeur initiale de 0. Puisque 0 est égal à l'entier 0 en PHP, la comparaison est évaluée comme vraie.
Pourquoi $test2 échoue
La chaîne $test2 contient également des caractères non numériques. Cependant, comme il commence par un chiffre, sa valeur initiale est interprétée comme un entier de 3581169. Cet entier n'est pas égal à 0, ce qui entraîne une fausse comparaison.
Éviter les anomalies de type
Pour éviter ces anomalies, utilisez toujours des comparaisons de types strictes. Dans l'exemple fourni, vous pouvez réécrire le code comme suit :
if ($test1 === "0") echo "Test 1 is Equal!"; if ($test2 === "0") echo "Test 2 is Equal!?";
En utilisant l'opérateur de comparaison stricte ===, vous vous assurez que les valeurs sont du même type et évitez des résultats inattendus.
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!