What is the difference between <> and !=


What is the difference between <> and !=

在PHP中,要检查不相等(没有检查类型),可以执行以下操作:

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

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

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

有什么不同吗?

使用!=而不是<>是否会以任何方式、形状或形式改变评估?

暂时忘记文档,让我们看看源代码。让我们从扫描仪(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();
}

所以实际上没有什么区别。由于它们解析为相同的令牌,因此具有完全相同的优先级。由于它们使用相同的执行器,并且操作码例程中没有决策点,因此它们执行相同的代码。

所以,是的,<>!=是100%可互换的,绝对没有技术上的理由使用其中一个。

话虽如此,保持一致还是有意义的。所以我建议坚持使用!=并完成它…

没有区别

然而,!=允许更容易地添加额外的=来强制类型比较。

一个人是旧的,一个人是新的。

根据手册:

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

使用CCD_ 9。

它们具有相同的优先顺序。

正如文档网站上提到的,<>!=只是同义词。这意味着它们完全可以互换。php的历史有点混乱,所以命名约定,甚至到了如何调用运算符的地步,过去和现在都没有真正统一。

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

没有区别。我想<>是在php的后期版本中添加的内容。这让我想起了Python。我认为使用AND或&amp;对于和操作员

没有什么不同,但我想我记得!=有一次速度更快,因为我运行了一个测试,发现<>正在执行我正在比较的对象的"diff"方法,这可能比"compare"方法慢。