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

Nea*_*eal 47 php operators

在PHP中检查不相等(没有检查类型),你可以这样做:

if( A != B ) {
    DO SOMETHING;
}
Run Code Online (Sandbox Code Playgroud)

但你也可以这样做,结果相同:

if( A <> B ) {
    DO SOMETHING;
}
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?

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

irc*_*ell 70

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

<ST_IN_SCRIPTING>"!="|"<>" {
    return T_IS_NOT_EQUAL;
}
Run Code Online (Sandbox Code Playgroud)

所以他们解析同样的道理.我们来看看解析器:

expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
Run Code Online (Sandbox Code Playgroud)

所以我们知道被解雇的操作码是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();
}
Run Code Online (Sandbox Code Playgroud)

所以没有区别.由于它们解析为相同的标记,因此它们具有完全相同的优先级(因此文档错误或具有误导性).由于它们使用相同的执行程序,并且操作码例程中没有决策点,因此它们执行相同的代码.

所以是的,<>并且!=是100%可互换的,并且绝对没有技术理由使用一个而不是另一个.

话虽如此,通过保持一致可以获得重要的收益.所以我建议坚持!=并完成它......

编辑

我更新了文档以反映这一点,并修复了优先顺序的另一个问题(++和 - 具有与强制转换相同的优先级).在docs.php.net查看

  • +1你让我在"他们解析相同的标记." (5认同)
  • 突然之间,我希望文档只是一种微妙的方式让人们离开`<>`路线...... (4认同)
  • 这是您可以回答这个问题的最佳方式.做得好! (2认同)

sqr*_*ram 28

一个人,一个人的新人.

根据手册:

$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.
Run Code Online (Sandbox Code Playgroud)

!=.

细微差别:还有一个优先顺序.看这里.

!=来之前!=在优先级表,但他们做到了同样的事情.


web*_*ave 27

没有不同.

但是,!=允许更方便地添加额外=的强制类型比较的便利性.


arv*_*ahl 5

截至提到的文档的网站,<>!=只是同义词.这意味着它们完全可以互换.php的历史有点疯狂,所以命名约定,甚至是如何调用运算符的,都是并且仍然没有真正统一.