Maison >développement back-end >tutoriel php >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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 02:11:14401parcourir

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

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