在PHP中,!=
和<>
运算符之间是否存在差异?
在manual中,它声明:
$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.
我想没有太大的差异,但我很好奇。
答案 0 :(得分:60)
在主要的Zend实现中没有任何区别。您可以从PHP Flex的scanner描述获取它:
<ST_IN_SCRIPTING>"!="|"<>" {
return T_IS_NOT_EQUAL;
}
T_IS_NOT_EQUAL
是生成的令牌。因此,Bison parser无法区分<>
和!=
令牌并平等对待它们:
%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
答案 1 :(得分:22)
正如接受的答案指出实现是相同的,但文档中它们之间存在细微差别...
根据this page,<>
运算符的优先级略高于!=
。
我不确定这是否是Zend实现中的错误,文档中的错误,或者只是其中一种情况,即PHP决定忽略优先规则。
更新:文档已更新,<>
和!=
之间不再有任何区别。
答案 2 :(得分:8)
他们是一样的。但是,还有!==
和===
个运算符,用于测试由值和类型定义的完全相等。
答案 3 :(得分:6)
<>
表示更大或更小。 !=
意味着不平等。它们的意思基本相同。
答案 4 :(得分:5)
正如每个人都说它们是相同的,一个来自一个C语言/ shell的语言分支,一个来自其他一些,包括过去高度集成的MySQL。
<>
应该被认为是语法糖,!=
的同义词,这是不正确的PHP风格。
三重字符识别函数!==
进一步强调。
答案 5 :(得分:2)
<>
与!=
运算符完全相同,因为它们都被解析为T_IS_NOT_EQUAL
令牌。
答案 6 :(得分:0)
运算符<>
和!=
相同。
但是,作为样式,我更喜欢在处理数字变量时使用<>
。
也就是说,如果:
$a
是整数$b
是整数而不是问:
// if $a is not equal to $b
if ($a != $b)
我会问:
// if $a is either less than or greater than $b
if ($a <> $b)
这是我的代码中的视觉提示/提醒,$a
和$b
肯定是 都是数字而不是一个或多个两者都是故意strings
。