Pourquoi une comparaison stricte de strpos() avec True donne-t-elle un résultat inattendu ?
Question :
Dans le code donné, l'intention est de trouver toute chaîne inacceptable à l'intérieur de la variable $link. Cependant, même lorsque « https » est présent dans $link, le code affiche « Acceptable ». Quelle est la raison de ce comportement inattendu ?
$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 />'; } }
Réponse :
L'explication réside dans la nature de la fonction strpos(). Comme indiqué, strpos() renvoie la position numérique de la première occurrence de $unacceptable dans $link. Cependant, dans le code d'origine, il est incorrectement comparé à true, qui a une valeur booléenne. Cela conduit à un résultat inattendu.
Pour résoudre ce problème, la comparaison doit être modifiée pour rechercher une valeur non fausse à la place. En utilisant !== false, le code identifiera correctement toutes les chaînes inacceptables trouvées.
// ... if (strpos($link, $unacceptable) !== false) {
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!