<>和!之间的区别是什么?=

在PHP中检查不等于(没有检查types),你可以这样做:

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

但是你也可以这样做,结果是一样的:

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

有什么区别吗?

使用!= over <>是否以任何方式,形状或forms改变评估?

忘记文档一分钟,让我们看看源代码。 让我们从扫描仪(词法分析器)开始 :

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

所以他们parsing同样的道理。 我们来看看parsing器 :

 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(); } 

所以这几乎没有区别。 由于他们parsing为同一标记,他们有完全相同的优先顺序(所以文档是错误的或误导)。 由于它们使用相同的执行程序,并且在操作码例程中没有决定点,它们执行相同的代码。

所以是的, <>!=是100%可互换的,绝对没有任何技术上的理由可以互相使用。

这样说,有一些重要的事情是一致的。 所以我build议只要坚持!=并完成它…

编辑

我已经更新了文档以反映这一点,并且用优先顺序(++和 – 具有与铸造相同的优先顺序)修复了另一个问题。 在docs.php.net上检查一下

没有不同。

但是, !=允许更方便地添加一个extra =来强制types比较。

旧的,新的。

根据手册 :

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

使用!=

次要的区别:也有一个优先顺序。 看这里。

<>在优先表中出现在!=之前,但他们完成了完全相同的事情。

正如在文档网站上提到的, <>!=只是同义词。 这意味着它们完全可以互换。 php的历史有点疯狂,所以命名约定,甚至到了操作符被调用的地步,现在还没有真正统一。

根据PHP手册: http : //fr.php.net/manual/en/language.operators.comparison.php它似乎没有任何区别。

没有区别。 我想<>是在后来的PHP版本中添加的。 有点让我想起Python。 我认为这与使用AND或&& for和运算符是一样的

它没有什么不同,但我想我记得!=一次更快,因为我运行了一个testing,发现<>正在执行我比较的对象的“差异”方法,这可能比“比较“ 方法。