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