"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi la comparaison lâche de chaînes à entiers de PHP renvoie-t-elle parfois des résultats inattendus ?

Pourquoi la comparaison lâche de chaînes à entiers de PHP renvoie-t-elle parfois des résultats inattendus ?

Publié le 2024-12-23
Parcourir:584

Why Does PHP's Loose String-to-Integer Comparison Sometimes Return Unexpected Results?

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 la documentation PHP sur la conversion de chaînes en nombres, lorsqu'une chaîne est évaluée dans un contexte numérique (comme une comparaison), elle est convertie en flottant ou un 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, elle est considérée 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 des caractères non numériques, alors pourquoi ne c'est aussi é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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3