<>和!之间的区别是什么?=
在PHP中检查不等于(没有检查types),你可以这样做:
if( A != B ) { DO SOMETHING; }
但是你也可以这样做,结果是一样的:
if( A <> B ) { DO SOMETHING; }
有什么区别吗?
使用!=
over <>
是否以任何方式,形状或forms改变评估?
忘记文档一分钟,让我们看看源代码。 让我们从扫描仪(词法分析器)开始 :
<ST_IN_SCRIPTING>"!="|"<>" { return T_IS_NOT_EQUAL; }
所以他们parsing同样的道理。 我们来看看parsing器 :
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(); }
所以这几乎没有区别。 由于他们parsing为同一标记,他们有完全相同的优先顺序(所以文档是错误的或误导)。 由于它们使用相同的执行程序,并且在操作码例程中没有决定点,它们执行相同的代码。
所以是的, <>
和!=
是100%可互换的,绝对没有任何技术上的理由可以互相使用。
这样说,有一些重要的事情是一致的。 所以我build议只要坚持!=
并完成它…
编辑
我已经更新了文档以反映这一点,并且用优先顺序(++和 – 具有与铸造相同的优先顺序)修复了另一个问题。 在docs.php.net上检查一下
没有不同。
但是, !=
允许更方便地添加一个extra =
来强制types比较。
旧的,新的。
根据手册 :
$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的历史有点疯狂,所以命名约定,甚至到了操作符被调用的地步,现在还没有真正统一。
根据PHP手册: http : //fr.php.net/manual/en/language.operators.comparison.php它似乎没有任何区别。
没有区别。 我想<>是在后来的PHP版本中添加的。 有点让我想起Python。 我认为这与使用AND或&& for和运算符是一样的
它没有什么不同,但我想我记得!=一次更快,因为我运行了一个testing,发现<>正在执行我比较的对象的“差异”方法,这可能比“比较“ 方法。