Maison  >  Article  >  développement back-end  >  Quelle est la différence entre l'idée d'introduire des opérateurs de comparaison PHP et les méthodes de comparaison conventionnelles ?

Quelle est la différence entre l'idée d'introduire des opérateurs de comparaison PHP et les méthodes de comparaison conventionnelles ?

伊谢尔伦
伊谢尔伦original
2017-06-21 11:13:461235parcourir

L'opérateur de comparaison en PHP est un peu bizarre et il est facile de faire des erreurs. Voici les règles de comparaison :

Lorsque deux caractères sont comparés en taille, les deux caractères sont. comparée. Taille du code ASCII des caractères - c'est facile à comprendre.

2. Lorsque deux chaînes sont comparées en taille, elles partent du premier caractère et comparent les tailles ASCII correspondantes à condition de partir d'une certaine position correspondante, la position actuelle de l'une des chaînes si le caractère. est plus grand que le caractère correspondant dans une autre chaîne, la taille des deux chaînes peut être directement déterminée, comme 'ba'>'az' - tout le monde le sait.

Ensuite, comparez '10' et 'a', bien sûr, c'est toujours la même chose. Comparez d'abord '1' et 'a' le code ASCII, 'a' est plus grand.

3. Lorsqu'un nombre est comparé à une chaîne/un caractère, le système essaie d'abord de convertir la chaîne/le caractère en un type entier/à virgule flottante, puis le compare. Par exemple, « 12bsd » est converti. à 12. « a » est converti en 0. Il faut noter qu'à ce moment, la valeur du code ASCII correspondant n'est pas comparée au nombre.

En fait, du même coup, le résultat de 'a'+10 est également 10.

et facilement ignoré : 0 est comparé à toute chaîne qui ne peut pas être convertie en nombre (l'opérateur est ==), les deux renvoient vrai.

Au final, le résultat suivant apparaîtra :

var_dump(&#39;1000000&#39;<&#39;a&#39;);    //result: boolean true
var_dump(&#39;a&#39;<1);            //result: boolean true
var_dump(1<&#39;1000000&#39;);      //result: boolean true

C'est encore un peu différent de la pensée conventionnelle. .

La façon la plus courante de comparer si deux chaînes sont égales est d'utiliser "===" pour juger. Quant à la différence entre "==", en termes simples, la première met l'accent sur "l'identique". tapez et nécessite également la même chose ; ce dernier nécessite « égal », et la même valeur suffit. Ou utilisez strcmp pour juger, mais cela peut vous dire si les deux chaînes sont égales, mais il ne peut pas vous dire où elles sont différentes.

Généralement, vous pouvez utiliser !=, == pour comparer si deux objets sont égaux. La raison pour laquelle ce sont deux objets est qu'ils ne sont pas nécessairement tous des chaînes, ils peuvent aussi être des entiers, etc.
Si vous utilisez !==,=== (vous pouvez voir un signe égal supplémentaire) pour la comparaison, les types des deux objets doivent être strictement égaux pour renvoyer true sinon, utilisez ==,!=, la chaîne ; sera automatiquement converti en type correspondant pour comparaison.

22 == "22"; // Return true
22 === "22"; // Return false

Just car De cette façon, des "accidents" inattendus se produisent souvent dans notre programme :

0 == "Je t'aime" // Return true
1 == "1 Je t'aime";// Return true

Il existe un ensemble de fonctions de comparaison de chaînes dans le tutoriel PHP : strcmp, strcasecmp, strncasecmp(), strncmp(), elles le sont toutes si la première est meilleure que la second Si plus grand, un entier supérieur à 0 est renvoyé ; si le premier est plus petit que le second, un entier inférieur à 0 est renvoyé ; si les deux sont égaux, 0 est renvoyé. Les principes de leur comparaison sont les mêmes que les règles. d'autres langues.

strcmp est utilisé pour la comparaison de chaînes sensibles à la casse (c'est-à-dire sensible à la casse) :
echo strcmp("abcdd", "abcde"); // Renvoie 1 (>0), la comparaison est " b" et "b"

strcasecmp est utilisé pour la comparaison de chaînes insensibles à la casse :
echo strcasecmp("abcdd", "abcde"); // renvoie -1 (acbe2ff0be122c858bcae3c70bb56b720), en comparant abc et abc

strncasecmp est utilisé pour la comparaison insensible à la casse d'une partie de la chaîne, à partir de La comparaison commence depuis le début de la chaîne. Le troisième paramètre est la longueur à comparer :
echo strncasecmp("abcdd", "abcde", 3); // Renvoie 0, en comparant abc et abc, puisque la taille n'est pas distinguée en écriture, donc les deux sont les mêmes.

Une autre situation est que la simple comparaison des tailles de chaînes ne peut pas répondre à nos besoins prédéterminés. Par exemple, normalement 10.gif sera plus grand que 5.gif, mais si vous appliquez les fonctions ci-dessus, il renverra - 1, ce qui signifie que 10.gif est meilleur que 5.gif Pour cette situation, PHP fournit deux fonctions de contraste naturel strnatcmp, strnatcasecmp :

echo strnatcmp("10.gif" , "5. gif"); // Retourne 1 (>0)
echo strnatcasecmp("10.gif", "5.gif"); // Retourne 1 (>0)

En PHP, l'utilisation de == n'est pas fiable. Même si les variables sont du même type, == étant vrai ne signifie pas qu’elles sont vraiment égales. Par conséquent, essayez d'utiliser === à des fins de comparaison en PHP. Assurez-vous de réfléchir à deux fois avant d'utiliser ==. Le fonctionnement de === en PHP est ZEND_IS_IDENTICAL. PHP n'essaiera pas de changer le type de valeur. Il est très strict et la vitesse de comparaison est plus rapide. Par exemple :

$aa = &#39;88.&#39;;//多个点
$b = &#39;88&#39;;
if($aa == $b) 
echo "相等";

得到的结果是相等。因为88是一个数字,php会自动转换成整型或者浮点型进行==比较,当然会相等; strcmp是强制转换成string类型比较,===是要求数值一样并且类型一样 88是int类型,88.是浮点类型,当然不一样。用恒等 === 则 不会得到相等的结论.用strcmp()也不会得到相等的结论.所以最好不要使用 == 作为字符串相等比较.改用strcmp();

       对于俩个字符串, 会首先判断他们是否是numeric_string, 如果是,那么就会转换成整形来比较.. 那么什么是numeric string呢? 因为PHP不区分类型, 所以它采用一个策略, 当你的变量看起来是一个数字的时候, 那么她就认为这个变量是一个数字,然后转换为整形来比较。

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn