Maison >développement back-end >tutoriel php >Pourquoi l'opérateur `==` de PHP produit-il des résultats inattendus lors de la comparaison de 0 et de chaînes ?

Pourquoi l'opérateur `==` de PHP produit-il des résultats inattendus lors de la comparaison de 0 et de chaînes ?

DDD
DDDoriginal
2024-12-15 00:59:13924parcourir

Why Does PHP's `==` Operator Produce Unexpected Results When Comparing 0 and Strings?

La comparaison surprenante de PHP entre 0 et les chaînes

L'évaluation par PHP de 0 comme égal à une chaîne découle du comportement de son opérateur de comparaison. Lors de l'utilisation de == à des fins de comparaison, PHP convertit les types de données pour qu'ils soient compatibles. Dans ce cas, 0 (un entier) est converti en chaîne, ce qui lui permet d'être comparé à la chaîne « e ».

Cependant, ce comportement devient incohérent lorsque le prix est explicitement fixé à 0. L'évaluation erratique peut être attribué à la différence subtile entre == et ===. == effectue la conversion de type, tandis que === vérifie l'égalité stricte, y compris le type de données.

L'utilisation de === garantit que la comparaison est basée sur les valeurs de données réelles, y compris leurs types. Dans le code fourni, remplacer == par === évaluera correctement 0 comme différent de « e » lorsque le prix est défini sur 0.

Remarques sur les modifications de version PHP :

En PHP 8, le comportement de comparaison a changé. Lors de la comparaison de chaînes numériques à des nombres, PHP utilise désormais la comparaison numérique. Sinon, PHP convertit les nombres en chaînes avant de faire la comparaison.

Exemple de code avec === :

$item['price'] = 0;
/* Code to get item information goes in here */
if($item['price'] === 'e') {
    $item['price'] = -1;
}

Avec cette correction, le code déterminera avec précision si le prix est censé être 0 ou un échange « e », garantissant une bonne gestion du prix de l'article.

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