Comprendre les comparaisons numériques dans strpos()
Lorsque vous effectuez des comparaisons d'égalité stricte à l'aide de la fonction strpos() en PHP, vous pouvez rencontrer des résultats inattendus . Cet article examine pourquoi comparer strpos() avec true peut conduire au résultat opposé attendu.
Dans le code fourni, l'instruction if compare le résultat de strpos($link, $unacceptable) avec true. Cependant, cette comparaison ne parvient pas à atteindre son objectif prévu, à savoir détecter la présence d'une chaîne indésirable dans $link.
Pour comprendre pourquoi cela se produit, nous devons nous référer à la documentation strpos(). Selon la documentation, strpos() renvoie la position numérique de la première occurrence de la chaîne recherchée dans la chaîne sujet. Cependant, si aucune occurrence n'est trouvée, elle renvoie false.
Dans l'extrait de code, l'instruction if vérifie si strpos() renvoie true. Puisque strpos() renvoie un nombre (0 ou plus) lorsqu'une correspondance est trouvée et false lorsqu'il n'y a pas de correspondance, l'instruction sera toujours évaluée à false si une correspondance est trouvée. En effet, true est considéré comme un nombre invalide dans une comparaison d'égalité stricte.
Pour résoudre ce problème, nous devons remplacer l'opérateur de comparaison par !== false, qui vérifie si le résultat de strpos() n'est pas false (c'est-à-dire qu'il a trouvé une correspondance) :
// ... if (strpos($link, $unacceptable) !== false) { echo 'Unacceptable Found<br />'; } else { echo 'Acceptable!<br />'; } // ...
En utilisant cette comparaison, le code identifiera correctement quand l'une des chaînes inacceptables est présente dans la variable $link et affichera le message approprié message.
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!