4

考虑以下示例:

$a='This is a test';

如果我现在这样做:

if(strpos($a,'is a') !== false) {
    echo 'True';
}

它得到:

True

但是,如果我使用

if(strpos($a,'is a') === true) {
    echo 'True';
}

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

4

2 回答 2

7

因为strpos()从不返回 true

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

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

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

如果你做了:

if(strpos($a,'is a') == true) {
    echo 'True';
}

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

于 2018-09-27T18:30:45.757 回答
0

strpos 函数在成功时返回一个整数值,仅当在字符串中找不到针时返回 false。在我们的例子中,字符串“This is a test”包含“is a”。所以测试(位置)!==false [其中位置是'is a'的第一次出现] 在类型和值上都与 false 不同,并且将返回 true。

于 2018-09-27T18:41:29.383 回答