PHP不等于!=和!==
我总是这样做if($foo!==$bar)
但是我意识到if($foo!=$bar)
也是正确的。 双=
仍然工作,一直为我工作,但每当我searchPHP运营商,我发现没有信息双=
所以我认为我一直做这个错误,但无论如何工作。 所以,我应该改变我所有的!==
为!=
只是为了它?
==
和!=
不考虑你比较的variables的数据types。 所以这些都会返回true:
'0' == 0 false == 0 NULL == false
===
和!==
确实考虑了数据types。 这意味着将string与布尔值进行比较将永远不会是真实的,因为它们是不同的types。 这些都将返回false:
'0' === 0 false === 0 NULL === false
您应该比较函数的数据types,以返回可能具有模糊的真/假值的值。 一个众所周知的例子是strpos()
:
// This returns 0 because F exists as the first character, but as my above example, // 0 could mean false, so using == or != would return an incorrect result var_dump(strpos('Foo', 'F') != false); // bool(false) var_dump(strpos('Foo', 'F') !== false); // bool(true), it exists so false isn't returned
!==应该匹配值和数据types
!=只是匹配忽略数据types的值
$num = '1'; $num2 = 1; $num == $num2; // returns true $num === $num2; // returns false because $num is a string and $num2 is an integer
$a !== $b
如果$a
不等于$b
,或者它们不是相同types, $a !== $b
TRUE
请参阅http://php.net/manual/en/language.operators.comparison.php
你可以在这里find信息: http : //www.php.net/manual/en/language.operators.comparison.php
这是稀缺的,因为直到PHP4才join。 你所拥有的是好的,如果你知道可能存在types差异,那么它是一个更好的比较,因为它是testing的价值和types的比较,而不仅仅是价值。