Comparaison de chaînes avec des entiers : explication de phénomènes peu courants
En PHP, comparer des chaînes à des entiers peut parfois donner des résultats bizarres. Cette confusion provient du comportement de comparaison lâche de PHP, en particulier lors de la comparaison de chaînes à la valeur 0.
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!?";
Étonnamment, le résultat de ce code est :
Test 1 is Equal!?
Pourquoi cela se produit-il ?
Selon le PHP documentation sur la conversion de chaîne en nombres, lorsqu'une chaîne est évaluée dans un contexte numérique (comme une comparaison), elle est convertie en flottant ou en entier en fonction de son contenu. Si la chaîne contient des caractères tels que « . », « e » ou « E », elle est traitée comme un flottant. Sinon, il est considéré comme un entier.
Dans le cas de $test1, la chaîne ne contient aucun caractère numérique et est donc convertie en valeur entière 0. C'est pourquoi la comparaison $test1 == 0 évalue à true.
Pourquoi $test2 ne fonctionne-t-il pas ?
$test2 commence également par caractères non numériques, alors pourquoi n'est-il pas également égal à 0 ? En effet, la chaîne contient le caractère « 3 » au début. Selon la documentation PHP, un numéro valide commence par un signe (facultatif) suivi de chiffres. Ainsi, $test2 est converti en float avec une valeur de 0, et la comparaison $test2 == 0 est évaluée comme false.
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!