Maison > développement back-end > tutoriel php > Pourquoi la comparaison strpos() avec `=== true` échoue-t-elle dans les recherches de chaînes PHP ?

Pourquoi la comparaison strpos() avec `=== true` échoue-t-elle dans les recherches de chaînes PHP ?

Mary-Kate Olsen
Libérer: 2024-12-16 18:15:11
original
218 Les gens l'ont consulté

Why Does strpos() Comparison with `=== true` Fail in PHP String Searches?

Vérité inattendue : Comprendre l'inadéquation dans les comparaisons strpos()

Malgré son utilisation courante pour les recherches de chaînes, la fonction PHP strpos() a un comportement non conventionnel lorsque l'on compare son résultat à vrai. Pour comprendre cette anomalie, examinons un extrait de code :

$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 />';
    }
}
Copier après la connexion

Étonnamment, ce code affiche "Acceptable !" pour chaque élément du tableau $unacceptables, même si "https:" est présent dans la variable $link.

Pour résoudre ce casse-tête, nous devons nous plonger dans la sémantique de strpos(). Comme l'indique sa documentation, strpos() renvoie la "position numérique de la première occurrence" de la chaîne $inacceptable dans $link. Dans ce cas, strpos() trouve "https:" à la position 0 et renvoie 0, ce qui est une valeur véridique en PHP.

Par conséquent, la condition dans l'instruction if (strpos($link, $unacceptable) === true) est évalué à true à chaque fois car strpos() renvoie toujours une position numérique, qui est toujours contrainte à un booléen true.

Pour rectifier cela, nous doit utiliser un opérateur de comparaison non strict (!==) :

if (strpos($link, $unacceptable) !== false) {
Copier après la connexion

En modifiant la comparaison en "pas égal à faux", nous garantissons que l'instruction if n'est évaluée qu'à vrai lorsque strpos() trouve une correspondance et renvoie une valeur non nulle (c'est-à-dire toute position numérique autre que 0).

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