В PHP существует ли разница между операторами !=
И <>
?
В руководстве говорится:
$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.
Я думаю, что нет огромных различий, но мне любопытно.
В основной реализации Zend нет никакой разницы. Вы можете получить его из описания Flex для сканера языка PHP:
<ST_IN_SCRIPTING>"!="|"<>" { return T_IS_NOT_EQUAL; }
Где T_IS_NOT_EQUAL
– сгенерированный токен. Поэтому анализатор Bison не различает <>
и !=
Токенов и рассматривает их одинаково:
%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
Поскольку в принятом ответе указывается, что реализация идентична, однако между ними есть небольшая разница в документации …
Согласно этой странице оператор <>
имеет несколько более высокий приоритет, чем !=
.
Я не уверен, что это ошибка в реализации Zend, ошибка в документации или только один из тех случаев, когда PHP решает игнорировать правила приоритета.
Обновление: документация обновляется, и теперь больше нет разницы между <>
и !=
.
Они одинаковые. Однако есть и операторы !==
и ===
которые проверяют точное равенство, определяемое значением и типом.
<>
означает больше или меньше. !=
означает не равную. Они в основном означают одно и то же.
Поскольку все говорят, что они идентичны, один из одного языка C-style / shell, один из некоторых других, включая MySQL, который был очень интегрирован в прошлом.
<>
следует считать синтаксическим сахаром, синонимом для !=
который является правильным стилем PHP для неравного.
Далее подчеркивается функция идентификации тройного символа !==
.
<>
точно совпадает с оператором !=
так как оба они анализируются как токен T_IS_NOT_EQUAL
.
И у них одинаковый приоритет .