Maison >développement back-end >tutoriel php >Pourquoi une comparaison lâche avec strpos() en PHP conduit-elle à des résultats inattendus ?
Une interprétation vague des valeurs de retour strpos() conduit à des résultats inattendus
Dans une quête pour localiser des sous-chaînes spécifiques dans une chaîne, il y a un piège qui peut conduire à des résultats inattendus lors de l'utilisation de la fonction strpos() de PHP. Découvrons le mystère qui explique pourquoi une vérification lâche des valeurs de retour strpos() peut prêter à confusion.
Considérez l'extrait de code ci-dessous :
if ( strpos($grafik['data'], $ss1) != false && strpos($grafik['data'], $ss2) != false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Dans ce code, strpos() est utilisé pour déterminer les positions des sous-chaînes $ss1 et $ss2 dans la chaîne $grafik['data']. L'intention est de vérifier la présence des deux sous-chaînes et de s'assurer que $ss1 est ordonné avant $ss2.
Selon le manuel PHP, strpos() renvoie false si la sous-chaîne n'est pas trouvée. Cependant, on a découvert que lorsque la sous-chaîne commence à la position zéro (c'est-à-dire le début de la chaîne), strpos() renvoie 0. Cela conduit à une interprétation involontaire où l'expression :
strpos($grafik['data'], $ss1) != false
est évaluée à false, bien que $ss1 soit présent à partir de la position zéro. Le coupable est l'opérateur d'équivalence faible !=, qui considère 0 comme équivalent à faux.
Pour remédier à ce problème, l'opérateur d'équivalence stricte === doit être utilisé à la place :
if ( strpos($grafik['data'], $ss1) !== false && strpos($grafik['data'], $ss2) !== false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
L'opérateur === effectue une comparaison stricte, garantissant que 0 n'est pas considéré comme équivalent à faux. Avec cette correction, le code déterminera correctement la présence de $ss1 et $ss2 et leurs positions relatives.
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!