无法使用基本类型获得===
和!==
的要点:
$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()
返回GET
或POST
(为string
)且$form->isValid()
返回布尔值true
或{{1} ,以下代码:
false
对于这个较短的一个有任何意义:
if('POST' === $request->getMethod() || (false === $form->isValid())) :
endif;
答案 0 :(得分:2)
有时候他们是必要的。例如,当使用strpos
检查字符串是否包含在另一个字符串中时,您必须将0
与false
区分开来。
错误:
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
当函数返回0
或false
,strpos
时,这将成为一个问题。
==
还有其他因素。如果您比较两种不同的类型,它会将转换值输入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。