Maison >développement back-end >tutoriel php >Pourquoi la comparaison de « strpos() » à « true » ne parvient-elle pas à détecter les occurrences de chaîne en PHP ?

Pourquoi la comparaison de « strpos() » à « true » ne parvient-elle pas à détecter les occurrences de chaîne en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 08:29:10339parcourir

Why Does Comparing `strpos()` to `true` Fail to Detect String Occurrences in PHP?

Interprétation erronée de la comparaison stricte de strpos() avec true

En tentant de déterminer si une chaîne contient un élément indésirable, les programmeurs peuvent rencontrer des résultats inattendus lors de l'utilisation de strpos() à des fins directes. comparaisons d'égalité.

Considérez ceci scénario :

$link = 'https://google.com';
$unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'];

foreach ($unacceptables as $unacceptable) {
    if (strpos($link, $unacceptable) === true) {
        echo 'Unacceptable Found<br />';
    } else {
        echo 'Acceptable!<br />';
    }
}

Curieusement, ce code affiche « Acceptable ! » pour chaque élément dans $inacceptables, bien que https soit présent dans $link. Ce comportement apparemment paradoxal découle de la nature de strpos() elle-même.

Plonger dans la documentation officielle PHP clarifie le véritable objectif de la fonction :

Renvoie la position numérique de la première occurrence de l'aiguille dans le chaîne de botte de foin.

Par conséquent, lorsque vous comparez directement le résultat de strpos() avec true, vous vérifiez effectivement l'existence de l'élément indésirable dans $link, pas son égalité avec true.

Pour résoudre ce problème, une approche plus appropriée consiste à utiliser !== false dans l'instruction if :

// ...
if (strpos($link, $unacceptable) !== false) {

Ce faisant, vous évaluer correctement si strpos() a détecté la présence de l'élément indésirable, entraînant le résultat souhaité.

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