“<>”和“!=”之间有什么区别?

54

在PHP中,要检查非等(不考虑类型),可以这样做:

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

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

if( A <> B ) {
    DO SOMETHING;
}
有什么不同吗?
使用!=<>是否在任何方面改变了评估?

我从未见过<>运算符。 - gen_Eric
9
@Rocket好的,现在你有了^_^ - Naftali
在查阅了PHP文档后,似乎!=<>都会进行“类型转换”。因此,它们看起来是相同的。http://www.php.net/manual/en/language.operators.comparison.php - gen_Eric
2
@Rocket <> 在 SQL 中也用于表示不等于。 - Stefan H
1
@StefanH:还有 != :-P - gen_Eric
1
当然,在很多情况下,你最好使用 !== - Spudley
7个回答

82

先不考虑文档,我们来看看源代码。让我们从扫描器(词法分析器)开始:

<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%可互换的,绝对没有使用其中一个而不是另一个的技术原因。

话虽如此,通过保持一致性可以获得显着的收益。因此,我建议只使用!=并完成它...


28

28

没有区别。

然而,!= 的方便之处在于更容易添加额外的 = 来强制进行类型比较。


5
正如文档网站中提到的,<>!=是完全同义的。这意味着它们可以完全互换。PHP的历史有点混乱,因此命名约定,甚至包括运算符的称呼方式,现在仍然没有真正统一。

2

2

没有区别。我猜 <> 是在php的较新版本中添加的。有点让我想起Python。我认为使用AND或&&作为and运算符也是相同的。


0

这没有任何不同,但我记得 != 曾经更快一些,因为我进行了一个测试,发现 <> 在执行我比较的对象的“diff”方法时可能会比“compare”方法慢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接