346 votes

Comparaison de chaînes en utilisant == vs strcmp

Il semble que l'opérateur == PHP est sensible à la casse? Alors, y a-t-il une raison d'utiliser strcmp() ? Est-il sécuritaire de faire quelque chose comme:

 if ( $password == $password2 ) { ... }
 

340voto

deceze Points 200115

La raison de l'utiliser est parce que strcmp

renvoie <0 si str1 est inférieur à str2; > 0 si str1 est supérieur à str2, et 0 s'ils sont égaux.

== ne renvoie que true ou false , il ne vous dit pas quelle est la chaîne "supérieure".

224voto

postfuturist Points 9836

Vous ne devriez jamais utiliser == pour la comparaison de chaînes. === est OK.

 $something = 0;
echo ('password123' == $something) ? 'true' : 'false';
 

Il suffit de lancer le code ci-dessus et vous verrez pourquoi.

 $something = 0;
echo ('password123' === $something) ? 'true' : 'false';
 

Maintenant, c'est un peu mieux.

102voto

Antimony Points 13190

N’utilisez pas == en PHP. Il ne faut pas ce que vous attendez. Même si vous comparez des chaînes en chaînes, PHP va implicitement jetèrent à flotteurs et faire une comparaison numérique si elles apparaissent numériques.

Pour l’exemple « 1e3 » == '1000' retourne la valeur true.

44voto

r3dsm0k3 Points 604

Eh bien... Selon ce rapport de bogue de php , vous pouvez même obtenir 0wned.

Il vous donne un avertissement, mais toujours contourner la comparaison.
Vous devriez faire `` comme @postfuturist a proposé.

33voto

DataPriest Points 736

N’oubliez pas, lors de la comparaison de chaînes, vous devez utiliser ' ===' opérateur (comparaison stricte) et non « == » opérateur (comparaison de lâche)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X