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
Libérer: 2024-12-14 02:11:14
original
343 Les gens l'ont consulté

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!?";
Copier après la connexion

Étonnamment, le résultat de ce code est :

Test 1 is Equal!?
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal