为什么是 !== false 的 strpos 不是真的?

Pet*_*ete 4 php boolean strpos stripos

考虑以下示例:

$a='This is a test';
Run Code Online (Sandbox Code Playgroud)

如果我现在这样做:

if(strpos($a,'is a') !== false) {
    echo 'True';
}
Run Code Online (Sandbox Code Playgroud)

它得到:

True
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用

if(strpos($a,'is a') === true) {
    echo 'True';
}
Run Code Online (Sandbox Code Playgroud)

我什么也得不到。为什么!==false不是===true在这种情况下我检查了 PHP 文档,strpos()但没有找到任何解释。

Joh*_*nde 7

因为strpos()永远不会返回 true

返回针相对于 haystack 字符串开头的位置(与偏移量无关)。另请注意,字符串位置从 0 开始,而不是 1。

如果未找到针,则返回 FALSE。

如果没有找到针,它只返回一个布尔值。否则它将返回一个整数,包括 -1 和 0,以及针出现的位置。

如果你做过:

if(strpos($a,'is a') == true) {
    echo 'True';
}
Run Code Online (Sandbox Code Playgroud)

通常会得到预期的结果,因为任何正整数都被认为是一个真值,并且因为当你使用==运算符时类型杂耍,结果将是真的。但是,如果字符串位于字符串的开头,则由于返回的零是假值,因此将等同于 false。