php 5 strpos() 返回 0 和 false 之间的区别?

2022-08-30 16:49:11
if(strpos("http://www.example.com","http://www.")==0){ // do work}

我希望这能解决为真,它确实做到了。但是当我这样做时会发生什么

if(strpos("abcdefghijklmnop","http://www.")==0){// do work}

这也传递了php 5,因为据我所知,strpos返回false,翻译为0。

这是正确的思想/行为吗?如果是这样,测试子字符串位于另一个字符串开头的解决方法是什么?


答案 1

是的,这是正确/预期的行为:

  • strpos当字符串开头有匹配项时可以返回0
  • 当没有匹配项时,它将返回false

问题是你不应该用来比较和;你应该使用 ,像这样:==0false===

if(strpos("abcdefghijklmnop","http://www.") === 0) {

}

或:

if(strpos("abcdefghijklmnop","http://www.") === false) {

}


有关详细信息,请参阅比较运算符

  • $a == $b如果 等于 ,则为 。TRUE$a$b
  • $a === $b将是 if 如果 等于 ,并且它们具有相同的类型TRUE$a$b

并且,引用strpos的手册页

此函数可能返回布尔值,但也可能返回一个非布尔值,其计算结果为 ,例如 或 。
有关详细信息,请阅读布尔值部分。
使用 === 运算符测试此函数的返回值。FALSEFALSE0""


答案 2

===并比较类型值,如下所示:!==

if (strpos("abcdefghijklmnop", "http://www.") !== false) {
     // do work     
}

推荐