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
Barbara Streisandoriginal
2024-12-26 10:38:09945parcourir

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

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

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

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