<> 和 != 有什么区别?
在PHP中,要检查不相等(不检查类型),您可以这样做:
if( A != B ) {
DO SOMETHING;
}
但你也可以这样做,结果相同:
if( A <> B ) {
DO SOMETHING;
}
有什么区别吗?
使用 over 是否会以任何方式、形状或形式更改评估?!=
<>
在PHP中,要检查不相等(不检查类型),您可以这样做:
if( A != B ) {
DO SOMETHING;
}
但你也可以这样做,结果相同:
if( A <> B ) {
DO SOMETHING;
}
有什么区别吗?
使用 over 是否会以任何方式、形状或形式更改评估?!=
<>
忘记文档一分钟,让我们看看源代码。让我们从扫描仪(词法分析器)开始:
<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%可互换的,并且绝对没有技术理由使用一个而不是另一个。<>
!=
话虽如此,通过保持一致性可以获得一些重要的东西。所以我建议坚持下去并完成它...!=
我已经更新了文档以反映这一点,并修复了优先级顺序的另一个问题(++ 和 -- 与强制转换具有相同的优先级)。在 docs.php.net 上查看
没有区别。
但是,允许更容易地添加额外的力类型比较的便利性。!=
=