【问题标题】:What is the difference between <> and != [duplicate]<> 和 != 有什么区别 [重复]
【发布时间】:2012-03-29 03:08:31
【问题描述】:

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

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

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

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

有什么不同吗?

使用!= 而不是&lt;&gt; 是否会以任何方式、形状或形式改变评估?

【问题讨论】:

  • 我从未见过&lt;&gt; 运算符。
  • @Rocket 现在你有^_^
  • 在搜索 PHP 文档之后,!=&lt;&gt; 似乎都在做“类型杂耍”。所以,它们看起来是一样的。 php.net/manual/en/language.operators.comparison.php
  • @Rocket 也用于sql中的不等式
  • @StefanH: 还有!= :-P

标签: php operators


【解决方案1】:

一个旧的,一个新的。

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】:

    暂时忘记文档,让我们查看源代码。让我们从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();
    }
    

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

    所以是的,&lt;&gt;!= 是 100% 可互换的,绝对没有技术上的理由来使用其中一个。

    话虽如此,通过保持一致可以获得一些重要的好处。所以我建议坚持使用!= 并完成它......

    编辑

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

    【讨论】:

    • 突然间,我希望文档只是作为一种微妙的方式撒谎,让人们远离&lt;&gt; 路线......
    • @BoltClock 太糟糕了,他们在the wrong order... ;-)
    • +1 你让我在“他们解析到相同的标记”。
    • 这是您回答这个问题的最佳方式。干得好!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      根据 PHP 手册:http://fr.php.net/manual/en/language.operators.comparison.php 好像没什么区别。

      【讨论】:

        【解决方案5】:

        documentation website 所述,&lt;&gt;!= 只是同义词。这意味着它们是完全可以互换的。 php 的历史有点疯狂,所以命名约定,甚至到了如何调用运算符的程度,过去和现在都没有真正统一。

        【讨论】:

          【解决方案6】:

          没有区别。

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2017-02-17
              • 2011-09-27
              • 2013-04-22
              • 1970-01-01
              • 1970-01-01
              • 2013-10-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多