PHP-<>和!=有什么区别

这个问题已经在这里有了答案:

  • PHP中“不相等”运算符<>和!=之间的区别                                     6个答案

在PHP中检查非相等性(不检查类型),您可以这样做:

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

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

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

有什么区别吗?

<>上使用!=是否会以任何方式,形状或形式更改评估?

Neal asked 2020-02-21T23:34:19Z
7个解决方案
70 votes

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

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

因此,我们知道触发的操作码是!= ...

现在,让我们检查一下操作:

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上查看

ircmaxell answered 2020-02-21T23:35:08Z
28 votes

一个人,一个新人。

根据手册:

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

使用!=

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

sqram answered 2020-02-21T23:35:41Z
27 votes

没有不同。

但是,!=的便利之处在于,可以更轻松地为强制类型比较添加额外的=

webbiedave answered 2020-02-21T23:36:05Z
5 votes

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

arvidkahl answered 2020-02-21T23:36:26Z
2 votes

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

Guillaume answered 2020-02-21T23:36:46Z
2 votes

没有区别。 我猜<>是在更高版本的php中添加的。 有点让我想起了Python。 我认为对AND运算符使用AND或&&也是一样

Yanki Twizzy answered 2020-02-21T23:37:06Z
0 votes

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

DanRedux answered 2020-02-21T23:37:27Z
translate from https://stackoverflow.com:/questions/9671785/what-is-the-difference-between-and