Maison > développement back-end > tutoriel php > Pourquoi une vérification vague de la valeur de retour de `strpos()` conduit-elle à des résultats inattendus en PHP ?

Pourquoi une vérification vague de la valeur de retour de `strpos()` conduit-elle à des résultats inattendus en PHP ?

Barbara Streisand
Libérer: 2024-12-11 20:15:11
original
808 Les gens l'ont consulté

Why Does Loosely Checking `strpos()`'s Return Value Lead to Unexpected Results in PHP?

Conséquence involontaire d'une vérification lâche de la valeur de retour strpos()

Lors de l'utilisation de strpos() pour localiser une sous-chaîne dans une chaîne, il est essentiel de comprendre les pièges potentiels liés à l'utilisation de comparaisons d'égalité ou d'inégalité pour évaluer sa valeur de retour. Bien que la documentation PHP indique que strpos() renvoie false lorsque la sous-chaîne n'est pas trouvée, cela peut conduire à des résultats inattendus lorsqu'elle renvoie 0 (indiquant le début de la chaîne).

Pour illustrer ce problème, considérons le extrait de code suivant :

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'intention est de vérifier la présence de $ss1 et $ss2 dans $grafik['data'] et de s'assurer que $ss1 apparaît avant $ss2. Cependant, cela ne tient pas compte du fait que strpos() renvoie 0 lorsque $ss1 commence au début de la chaîne.

Selon la documentation PHP :

Attention

Cette fonction peut renvoyer un booléen FALSE, mais peut également renvoyer une valeur non booléenne qui s'évalue à FALSE, telle que comme 0 ou "". Veuillez lire la section sur les booléens pour plus d'informations. Utilisez l'opérateur === pour tester la valeur de retour de cette fonction.

Pour résoudre ce problème, il est nécessaire d'utiliser l'opérateur d'égalité stricte === au lieu de l'opérateur d'égalité lâche ==.

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

En utilisant ===, la comparaison évaluera correctement la valeur de retour de strpos() comme vraie lorsque la sous-chaîne est trouvée. Cette modification garantit le comportement logique prévu de l'extrait de code.

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