php 〈>和!= [duplicate]有什么区别

jw5wzhpr  于 2022-12-21  发布在  PHP
关注(0)|答案(7)|浏览(145)
    • 此问题在此处已有答案**:

Difference between "not equal" operators <> and != in PHP(5个答案)
九年前就关门了。
在PHP中检查不相等(不检查类型),你可以这样做:

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

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

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

有什么区别吗?
<>上使用!=是否会以任何方式、形状或形式改变评估?

fsi0uk1n

fsi0uk1n1#

暂时忘记文档,让我们来看看源代码。让我们从扫描器(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%可互换的,绝对没有技术上的理由使用一个而不是另一个。
因此,我建议你坚持使用!=,并且一直使用下去...

aoyhnmkz

aoyhnmkz2#

没有区别。

但是,!=允许更容易地添加额外的=以强制进行类型比较。

noj0wjuj

noj0wjuj3#

一个旧的,一个新的。
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.

g52tjvyc

g52tjvyc4#

正如在documentation website中提到的,<>!=只是同义词,这意味着它们是完全可以互换的. php的历史有点混乱,所以命名约定,甚至到了如何调用操作符的程度,过去和现在都没有真正统一。

gojuced7

gojuced76#

没有区别。我猜〈〉是在php的一个更高版本中添加的。有点让我想起Python。我认为使用AND或&&作为and操作符也是一样的

6psbrbz9

6psbrbz97#

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

相关问题