Maison > développement back-end > tutoriel php > Pourquoi une comparaison lâche avec strpos() en PHP conduit-elle à des résultats inattendus ?

Pourquoi une comparaison lâche avec strpos() en PHP conduit-elle à des résultats inattendus ?

Barbara Streisand
Libérer: 2024-12-26 10:38:09
original
1014 Les gens l'ont consulté

Why Does Loose Comparison with strpos() in PHP Lead to Unexpected Results?

Une interprétation vague des valeurs de retour strpos() conduit à des résultats inattendus

Dans une quête pour localiser des sous-chaînes spécifiques dans une chaîne, il y a un piège qui peut conduire à des résultats inattendus lors de l'utilisation de la fonction strpos() de PHP. Découvrons le mystère qui explique pourquoi une vérification lâche des valeurs de retour strpos() peut prêter à confusion.

Considérez l'extrait de code ci-dessous :

if (
    strpos($grafik['data'], $ss1) != false
    && strpos($grafik['data'], $ss2) != false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)
Copier après la connexion

Dans ce code, strpos() est utilisé pour déterminer les positions des sous-chaînes $ss1 et $ss2 dans la chaîne $grafik['data']. L'intention est de vérifier la présence des deux sous-chaînes et de s'assurer que $ss1 est ordonné avant $ss2.

Selon le manuel PHP, strpos() renvoie false si la sous-chaîne n'est pas trouvée. Cependant, on a découvert que lorsque la sous-chaîne commence à la position zéro (c'est-à-dire le début de la chaîne), strpos() renvoie 0. Cela conduit à une interprétation involontaire où l'expression :

strpos($grafik['data'], $ss1) != false
Copier après la connexion

est évaluée à false, bien que $ss1 soit présent à partir de la position zéro. Le coupable est l'opérateur d'équivalence faible !=, qui considère 0 comme équivalent à faux.

Pour remédier à ce problème, l'opérateur d'équivalence stricte === doit être utilisé à la place :

if (
    strpos($grafik['data'], $ss1) !== false
    && strpos($grafik['data'], $ss2) !== false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)
Copier après la connexion

L'opérateur === effectue une comparaison stricte, garantissant que 0 n'est pas considéré comme équivalent à faux. Avec cette correction, le code déterminera correctement la présence de $ss1 et $ss2 et leurs positions relatives.

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