What is the difference between <> and !=
在php中,要检查不相等(不检查类型),可以执行以下操作:
1 2 3 | if( A != B ) { DO SOMETHING; } |
但您也可以这样做,其结果相同:
1 2 3 | if( A <> B ) { DO SOMETHING; } |
有什么区别吗?
在
忘记文档一分钟,让我们看看源代码。让我们从扫描仪(lexer)开始:
1 2 3 | <ST_IN_SCRIPTING>"!="|"<>" { return T_IS_NOT_EQUAL; } |
所以它们解析到相同的标记。让我们看看解析器:
1 | expr T_IS_NOT_EQUAL expr { zend_do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 TSRMLS_CC); } |
所以我们知道触发的操作码是
现在,让我们检查一下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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(); } |
所以没有什么区别。因为它们解析到相同的标记,所以它们具有完全相同的优先级(因此文档要么是错误的,要么是误导的)。因为它们使用相同的执行器,并且操作码例程中没有决策点,所以它们执行相同的代码。
所以是的,
有了这句话,一致性就有了重要的收获。所以我建议你还是坚持使用
我更新了文档以反映这一点,并修复了另一个具有优先顺序的问题(++和--与强制转换具有相同的优先顺序)。在docs.php.net上查看
没有区别。
但是,
人老了,人新了。
根据手册:
1 2 | $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. |
使用
次要的区别:还有一个优先顺序。看这儿。
在优先表中,
如文档网站所述,
没有区别。我猜<>是在以后的PHP版本中添加的内容。有点让我想起了Python。我认为对于和运算符使用和或
根据php手册:http://fr.php.net/manual/en/language.operators.comparison.php这似乎没有什么区别。
没什么不同,但我想我记得!=曾经更快,因为我运行了一个测试,发现<>正在执行我正在比较的对象的"diff"方法,这可能比"compare"方法慢。