Position actuelle: Accueil> Derniers articles> Comment comprendre que STRPOS revient faux? Analyse approfondie des pièges à utiliser des valeurs booléennes STRPOS

Comment comprendre que STRPOS revient faux? Analyse approfondie des pièges à utiliser des valeurs booléennes STRPOS

M66 2025-07-26

Dans PHP, la fonction STRPOS est utilisée pour trouver où une chaîne apparaît d'abord dans une autre chaîne. Si aucune sous-chaîne spécifiée n'est trouvée dans la chaîne cible, STRPOS renvoie False . Cependant, comme FAUX est considéré comme une "fausse valeur" en PHP, cela peut provoquer une confusion entre certains programmeurs lorsqu'il s'agit de valeurs de retour, en particulier lorsque la valeur de retour est confondue avec 0 (la position de départ de la chaîne). Cet article analysera en profondeur pourquoi les STRPO sont renvoyés faux , utilisent des pièges et comment gérer efficacement ces situations.

1. Utilisation de base de la fonction STRPOS

Le prototype de la fonction STRPOS est le suivant:

 <span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $ Haystack : La chaîne à rechercher.

  • $ aiguille : la sous-chaîne à trouver.

  • $ Offset : Offset de démarrage facultatif, spécifiant par où commencer la recherche.

Si $ aiguille existe dans $ Haystack , STRPOS renverra l'emplacement où $ Needle apparaît d'abord (l'index commence à 0). Si $ aigule n'est pas trouvé, false est retourné.

2. Misounts communs lorsque StrPOS revient faux

Dans PHP, False est traité comme une "fausse valeur", donc dans un contexte booléen, FALSE est traité comme faux , et toute autre valeur non nulle est traitée comme vraie . Le problème est que STRPOS peut retourner faux ou 0 . Étant donné que 0 est une fausse valeur en PHP, cela entraînera une confusion entre les programmeurs lors de la comparaison.

Par exemple, le code suivant peut produire une erreur:

 <span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Found!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Not found!"</span></span><span>;
}
</span></span>

Si la position de départ de $ de $ dans $ Haystack est 0 (c'est-à-dire qu'elle est au début de la chaîne), STRPOS renvoie 0 , et si le jugement traitera 0 comme faux , croit à tort que la sous-chaîne n'a pas été trouvée, sortant ainsi "non trouvé!" .

3. Comment juger correctement la valeur de retour de STRPOS

Pour éviter ce problème, un opérateur de comparaison strict ( === ) doit être utilisé car === La comparaison n'est pas seulement la valeur, mais aussi le type. Dans ce cas, la sous-chaîne n'est pas trouvée uniquement si la valeur de retour est strictement égale à False :

 <span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Found!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Not found!"</span></span><span>;
}
</span></span>

Cette approche évite la situation où 0 est confondu avec False . Le code peut le gérer correctement, peu importe que l'emplacement où $ aigule apparaisse soit le début de la chaîne (c'est-à-dire que l'index est 0 ) ou le milieu.

4. La situation où STRPOS revient faux

Il y a plusieurs situations qui font que STRPOS retourne faux :

  • La sous-chaîne n'existe pas : le cas le plus courant est que la sous-chaîne $ aiguille n'apparaît pas du tout dans la chaîne cible $ haystack .

  • Entrée de type non valide : STRPOS peut renvoyer false si le type de paramètre entrant est incorrect (comme $ Haystack n'est pas une chaîne).

  • Le décalage est trop grand : si un décalage est défini, ce qui fait que $ aigule ne peut être trouvé dans les chaînes restantes, STRPOS reviendra également faux .

5. meilleures pratiques lors de l'utilisation de STRPOS

Pour éviter de rester coincé dans des malentendus, voici quelques meilleures pratiques pour l'utilisation des STRPO :

  • Utilisez toujours une comparaison stricte ( === ) : Comme mentionné précédemment, évitez d'utiliser des opérateurs de comparaison lâche ( == ) car il confondre 0 et faux .

  • Vérifier le type de paramètre : assurez-vous que $ haystack et $ aigule sont les deux types de chaînes. Si vous n'êtes pas sûr, vous pouvez utiliser la fonction is_string () à vérifier.

  • Comprendre les décalages : lorsque vous utilisez des décalages, vous devez clarifier l'effet des décalages et éviter de définir des valeurs trop grandes, ce qui peut entraîner l'échec des recherches de sous-chaîne.

6. Résumé

La valeur de retour de la fonction STRPOS peut être 0 ou fausse , et les deux ont une sémantique booléenne différente en PHP. Afin d'éviter les erreurs de programme causées par 0 traitée comme une comparaison fausse , un type strict ( ! == FALSE ) doit toujours être utilisé pour déterminer si une sous-chaîne a été trouvée. Comprendre le fonctionnement des STRPOS et comment gérer correctement ses valeurs de retour est la clé pour éviter les erreurs potentielles et écrire du code robuste.