Différence entre les opérateurs "non égaux" et!= en PHP
En PHP, y a-t-il une différence entre les opérateurs !=
et <>
?
Dans le manuel , Il est écrit:
$a != $b Not equal TRUE if $a is not equal to $b after type juggling.
$a <> $b Not equal TRUE if $a is not equal to $b after type juggling.
Je suppose qu'il n'y a pas de différences énormes mais je suis curieux.
6 réponses
Dans l'implémentation principale de Zend, il n'y a pas de différence. Vous pouvez l'obtenir à partir de la Flex description du langage PHP scanner:
<ST_IN_SCRIPTING>"!="|"<>" {
return T_IS_NOT_EQUAL;
}
Où T_IS_NOT_EQUAL
est le jeton généré. Donc le Bison l'analyseur ne fait pas la distinction entre les jetons <>
et !=
et les traite également:
%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL
%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
Comme le souligne la réponse acceptée, l'implémentation est identique, mais il existe une différence subtile entre eux dans la documentation ...
Selon cette page l'opérateur <>
a une priorité légèrement supérieure à !=
.
Je ne suis pas sûr qu'il s'agisse d'un bug dans L'implémentation de Zend, d'un bug dans la documentation, ou juste d'un de ces cas où PHP décide d'ignorer les règles de priorité.
Mise à Jour: La documentation est mis à jour et il n'y a plus de différence entre <>
et !=
.
Ils sont les mêmes. Cependant, il existe également des opérateurs !==
et ===
qui testent l'égalité exacte, définie par la valeur et type.
<>
signifie soit plus grand ou plus petit. !=
signifie pas égal. Ils signifient essentiellement la même chose.
Comme tout le monde dit qu'ils sont identiques, un d'une branche de langage C-style/shell, un de quelques autres y compris MySQL qui était hautement intégré dans le passé.
<>
devrait être considéré comme du sucre syntaxique, un synonyme de !=
qui est le style PHP approprié pour not-equal.
Accentuée par la fonction d'identité à Trois Caractères !==
.
<>
est exactement le même que l'opérateur !=
puisque les deux sont analysés en tant que jeton T_IS_NOT_EQUAL
.