使用PHP相同的比较运算符和原始类型确实有意义吗?

时间:2012-07-22 16:02:37

标签: php comparison operators logical-operators

无法使用基本类型获得===!==的要点:

$a === $b TRUE if $a is equal to $b, and they are of the same type.
$a !== $b TRUE if $a is not equal to $b, or they are not of the same type.

假设$request->getMethod()返回GETPOST(为string)且$form->isValid()返回布尔值true或{{1} ,以下代码:

false

对于这个较短的一个有任何意义:

if('POST' === $request->getMethod() || (false === $form->isValid())) :
endif;

4 个答案:

答案 0 :(得分:2)

有时候他们是必要的。例如,当使用strpos检查字符串是否包含在另一个字符串中时,您必须将0false区分开来。

错误:

if(strpos($haystack,$needle))...

右:

if(strpos($haystack,$needle) !== false)...

答案 1 :(得分:2)

你在PHP中有truty和falsy值。例如,0''array()是假值。如果您使用==,则会将这些值与truty / falsy值匹配:

var_dump(true == 'hello'); // true because a not empty string is a truty value
var_dump(false == 0); // true

===不仅会匹配值,还会匹配类型:

var_dump(true === 'hello'); // false, true is a boolean and 'hello' a string
var_dump(false === 0); // false, false is a boolean and 0 is a string

当函数返回0falsestrpos时,这将成为一个问题。


==还有其他因素。如果您比较两种不同的类型,它会将转换值输入int

var_dump("123abc" == 123); // true, because '123abc' becomes `123`

如果您比较密码,则会出现问题:http://phpsadness.com/sad/47

答案 2 :(得分:1)

在比较不同类型时,

==有时会有奇怪的行为。例如。 'POST'将被视为等于0。这就是为什么许多人通常使用===,它避免了类型杂耍问题。

在你的情况下,它应该没有什么区别。

答案 3 :(得分:1)

虽然可能不需要,

(false===$form->isValid())

!$form->isValid()

与第一个查看$form->isValid()的值是否为false是不一样,而第二个是检查$form->isValid()是否为falsey值,例如{{1}返回$form->isValid()然后第一个语句将不会计算为true,而第二个语句将变为true。