Ответ 1
Забывая документацию в течение минуты, дайте возможность проверить исходный код. Начнем с сканера (lexer):
<ST_IN_SCRIPTING>"!="|"<>" {
return T_IS_NOT_EQUAL;
}
Поэтому они анализируют один и тот же токен. Позвольте проверить парсер:
expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
Итак, мы знаем, что активированный код операции ZEND_IS_NOT_EQUAL
...
Теперь давайте рассмотрим операцию:
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();
}
Так что буквально никакой разницы. Поскольку они анализируют один и тот же токен, они имеют точно такой же приоритет (поэтому документы являются неправильными или вводят в заблуждение). Поскольку они используют один и тот же исполнитель, и там нет точки принятия решения в подпрограмме opcode, они выполняют идентичный код.
Итак, да, <>
и !=
являются взаимозаменяемыми на 100%, и нет никаких технических оснований для использования друг над другом.
С учетом сказанного, есть что-то важное, чтобы выиграть, будучи последовательным. Поэтому я рекомендую просто придерживаться !=
и делать с ним...
Изменить
Я обновил документы, чтобы отразить это, и исправил еще одну проблему с порядком приоритета (++ и - имеет тот же приоритет, что и кастинг). Проверьте это на docs.php.net