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) )
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) )
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!