54 votes

Quelle est la différence entre <> et! =

En PHP, pour vérifier la non-égalité (sans vérifier le type), vous pouvez faire ceci:

 if( A != B ) {
    DO SOMETHING;
}
 

Mais vous pouvez aussi faire cela, ce qui a le même résultat:

 if( A <> B ) {
    DO SOMETHING;
}
 

Y a-t-il une différence?

Utiliser != sur <> modifie-t-il l'évaluation de quelque façon que ce soit?

82voto

ircmaxell Points 74865

L'oubli de la documentation pour une minute, nous allons vérifier dans le code source. Commençons par le scanner (lexer):

<ST_IN_SCRIPTING>"!="|"<>" {
    return T_IS_NOT_EQUAL;
}

Donc ils analyser de la même manière. Nous allons vérifier l'analyseur:

expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }

Donc, nous savons que l'opcode est déclenché est - ZEND_IS_NOT_EQUAL...

Maintenant, nous allons vérifier le fonctionnement:

static int ZEND_FASTCALL  ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
    USE_OPLINE

    zval *result = &EX_T(opline->result.var).tmp_var;

    SAVE_OPLINE();
    ZVAL_BOOL(result, fast_not_equal_function(result,
        opline->op1.zv,
        opline->op2.zv TSRMLS_CC));

    CHECK_EXCEPTION();
    ZEND_VM_NEXT_OPCODE();
}

Donc il n'y a littéralement pas de différence. Depuis ils analyser de la même manière, ils ont exactement le même ordre de priorité (de sorte que les docs sont fausses ou trompeuses). Depuis qu'ils utilisent la même exécuteur, et il n'y a pas de point de décision dans l'opcode de routine, ils exécutent un code identique.

Donc oui, <> et != 100% interchangeables, et il n'y a absolument aucune raison technique à utiliser l'un sur l'autre.

Avec cela dit, il y a quelque chose d'important à gagner à être cohérent. Donc, je vous recommande tout simplement coller avec != et être fait avec elle...

Modifier

J'ai mis à jour la documentation pour en tenir compte, et fixe un autre problème avec l'ordre de priorité (++ et -- ont la même priorité que le moulage). Le vérifier sur docs.php.net

28voto

katsh Points 2326

On est vieux, on est nouveau.

selon le manuel :

 $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.
 

utilisez != .

La différence mineure: il existe également un ordre de priorité. regarde ici.

<> vient avant != dans le tableau des priorités, mais ils accomplissent exactement la même chose.

28voto

webbiedave Points 28781

Aucune différence.

Cependant, != permet d'ajouter plus facilement un = supplémentaire pour forcer la comparaison de types.

5voto

arvidkahl Points 562

Comme mentionné sur le site Web de la documentation , <> et != sont que des synonymes. Cela signifie qu'ils sont complètement interchangeables. L'histoire de php est un peu sauvage, aussi les conventions de nommage, même au sens où les opérateurs doivent être appelés, étaient et ne sont toujours pas unifiées.

2voto

Guillaume Points 199

Selon le manuel PHP: http://fr.php.net/manual/en/language.operators.comparison.php, il ne semble pas y avoir de différence.

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