<>和!=之间有什么区别?
这个问题在这里已经有了答案:
暂时忘记文档,让我们来看看源代码。 让我们从扫描仪(词法分析器)开始:
<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();
}
所以几乎没有区别。 由于他们解析为同一标记,他们具有完全相同的优先级(因此文档是错误的或误导性的)。 由于它们使用相同的执行程序,并且在操作码例程中没有决定点,它们将执行相同的代码。
所以是的, <>
和!=
是100%可互换的,绝对没有任何技术上的理由可以互相使用。
如此说来,通过保持一致有一些重要的事情可以获得。 所以我建议你只要坚持!=
并完成它...
编辑
我更新了文档以反映这一点,并用优先顺序修复了另一个问题(++和 - 具有与投射相同的优先顺序)。 在docs.php.net上查看它
没有不同。
但是, !=
允许更方便地添加一个extra =
来强制类型比较。
旧的,新的。
根据手册:
$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.
使用!=
。
次要区别:还有一个优先顺序。 看这里。
<>
在优先表中出现在!=
之前,但他们完成了完全相同的事情。