Php strpos意外失败

Php strpos意外失败,php,strpos,Php,Strpos,问题,以下内容是如何执行echo的: $str = "Hello World"; if (strpos($str, 'He') !== false) { echo 'GOOD'; } 但这并不是: $str = "Hello World"; if (strpos($str, 'He') === true) { echo 'GOOD'; } 这两个条件是否等价,因为它们都在检查返回的布尔值是否设置为true?不是吗!==false与===true相同,如果不是,为什么不 我

问题,以下内容是如何执行echo的:

$str = "Hello World";

if (strpos($str, 'He') !== false) {
    echo 'GOOD';
}
但这并不是:

$str = "Hello World";

if (strpos($str, 'He') === true) {
    echo 'GOOD';
}
这两个条件是否等价,因为它们都在检查返回的布尔值是否设置为true?不是吗!==false与===true相同,如果不是,为什么不


我感谢您的澄清。

不,它们不是等效的:


返回布尔值
FALSE
(如果未找到)或整数偏移值(如果在偏移量0处找到,可以是
0
,依此类推),但它从不返回布尔值
TRUE
。例如,布尔值
TRUE
!=一个
INT

操作符
=
不仅比较值,还比较数据类型。如果
strpos
找到子字符串,它将返回类型为
int
的位置。因为它不是bool,所以不满足条件。

strpos的目的不是返回布尔值,而是在成功时返回索引。感谢您的澄清!您可以测试
isnumeric(strpos(…)
isint(strpos(…)
,但这比简单地测试
!=false
我想,这不是最佳答案,这就是我编辑回复的原因。非常感谢。