<>之间的区别是什么?和!=

时间:2012-03-12 17:23:26

标签: php operators

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

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

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

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

有什么不同吗?

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

7 个答案:

答案 0 :(得分:69)

忘记文档一分钟,让我们查看源代码。让我们从the scanner (lexer)开始:

<ST_IN_SCRIPTING>"!="|"<>" {
    return T_IS_NOT_EQUAL;
}

所以他们解析同样的道理。我们来看看the parser

expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }

所以我们知道被解雇的操作码是ZEND_IS_NOT_EQUAL ...

现在,让我们看看the operation

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

上查看

答案 1 :(得分:27)

一个人,一个人是新人。

according to the manual

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

使用!=

They have the same order of precedence.

答案 2 :(得分:27)

没有区别。

但是,!=可以更方便地添加额外的=来强制进行类型比较。

答案 3 :(得分:5)

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

没有区别。我想&lt;&gt;是在更高版本的PHP中添加的东西。有点让我想起Python。我认为使用AND或&amp;&amp;对于和运算符

答案 6 :(得分:0)

没有任何不同,但我想我记得了!=一次更快,因为我跑了一个测试,发现&lt;&gt;正在执行我正在比较的对象的“diff”方法,这可能比“比较”方法慢。