1

无法理解原始类型===的要点:!==

$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()返回GETor POST(as string) 并且$form->isValid()返回一个布尔值trueor false,下面的代码:

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

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

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

4 回答 4

2

它们有时是必要的。例如,当strpos用于检查一个字符串是否包含在另一个字符串中时,您必须0false.

错误的:

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

对:

if(strpos($haystack,$needle) !== false)...
于 2012-07-22T16:09:56.430 回答
2

您在 PHP 中有真实和虚假的价值观。例如,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

0例如,当函数可以返回或时false,这将成为一个问题strpos


也有其他因素==int如果您比较 2 种不同的类型,它会将类型转换为 a :

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

如果您比较密码,这将是有问题的:http: //phpsadness.com/sad/47

于 2012-07-22T16:13:01.710 回答
1

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

在你的情况下,它不应该有所作为。

于 2012-07-22T16:07:04.567 回答
1

虽然可能不需要,

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

!$form->isValid()

与第一个检查值是否$form->isValid()为假不同,而第二个检查是否$form->isValid()为假值,因此例如如果$form->isValid()返回null,则第一个语句将不会计算为真,而第二个语句将计算为真的。

于 2012-07-22T16:13:37.220 回答