如果我不';t使用===或!==在PHP中

如果我不';t使用===或!==在PHP中,php,if-statement,comparison,operators,Php,If Statement,Comparison,Operators,可能重复: 在PHP中,if命令的条件包含运算符==和== 我从不使用它们。所以我想知道我们什么时候需要给他们打电话 例如 如果第一个,可能会出现什么问题?举一个这样的例子: $str = '*Hello*World*'; if (FALSE != strpos($str, '*')){ // Echo if string has an '*' in it! echo $str; } 这不起作用,因为返回第一个匹配项的索引。在本例中,它返回0FALSE==0,但FALSE!

可能重复:

在PHP中,
if
命令的条件包含运算符
==
==

我从不使用它们。所以我想知道我们什么时候需要给他们打电话

例如


如果第一个
,可能会出现什么问题?

举一个这样的例子:

$str = '*Hello*World*';
if (FALSE != strpos($str, '*')){
    // Echo if string has an '*' in it!
    echo $str;
}
这不起作用,因为返回第一个匹配项的索引。在本例中,它返回0
FALSE==0
,但
FALSE!==0

0 == '' == null == false == array()
如果您需要知道其中两个之间的差异,则需要==


如果没有a===您将不知道“apple”在第一个位置是否有a,或者它是否不存在。

当您使用
==
时,PHP使用松散的比较而不是
=
和'==。松散比较意味着,类型是根据“相似性”进行比较的。要获得类型比较的概述,请查看1000种类型的确切副本在询问之前,您应该尝试花一些时间google@Col.Shrapnel当你投票接近时,你可以提名1000人中的一个。NamGVU我的答案对你有帮助吗?@Paulpro没有,很抱歉,不是这样。我认为您的好场景描述了
strpos
函数的错误用法-返回的整数值的含义根本不应该用作布尔值。这还不足以说服我使用!==确实有。@NamGVU
strpos
如果不匹配,则返回一个布尔值。如果匹配在字符串的最开头,它还可以返回
0
。如果您使用
=
您无法判断它是否返回了
0
false
,但是如果您使用
==您可以区分字符串开头的匹配与否。@NamGVU还可以在PHP手册页面中看到关于返回值的部分中的警告,以获得同意。我的缺点是没有仔细阅读手册。非常感谢你帮助我了解这一点!毕竟,这导致了PHP对这种代码的设计,即Strups<代码>函数——如果PHP认为FALSE和0是“相同”的,那么它们应该使STRPOS成为其他语言(如C++、爪哇、C等)的传统方式。感谢strpos示例,我不认为与布尔值比较是此方法的正确用法。不过,您关于
0
null
'
false
array()
的声明对我来说是一个极好的观点。非常感谢。
0 == '' == null == false == array()
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

strpos('apple', 'a') == 0

strpos('apple', 'b') == false