php 5 strpos()返回0和false之间的差异?

php 5 strpos()返回0和false之间的差异?,php,strpos,Php,Strpos,我希望这是真的,确实如此。但是当我这么做的时候会发生什么呢 if(strpos("http://www.example.com","http://www.")==0){ // do work} 这也会传递到PHP5,因为就我所知,strpos返回false,即0 这是正确的想法/行为吗?如果是这样的话,测试子字符串是否位于另一个字符串的开头的变通方法是什么?==和==比较类型和值,如下所示: if(strpos("abcdefghijklmnop","http://www.")==0){//

我希望这是真的,确实如此。但是当我这么做的时候会发生什么呢

if(strpos("http://www.example.com","http://www.")==0){ // do work}
这也会传递到PHP5,因为就我所知,strpos返回false,即0


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

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

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

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

  • strpos
    可以在字符串开头有匹配项时返回
    0
  • 当没有匹配项时,它将返回
    false
问题是你不应该用
==
来比较
0
false
;您应该使用
==
,如下所示:

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


有关更多信息,请参阅:

  • 如果
    $a
    等于
    $b
    ,则
    $a===b
    将为
    TRUE
  • $a===$b
    如果
    $a
    等于
    $b
    ,并且它们属于同一类型,则
    将为
并引用:

此函数可能返回布尔值
FALSE
,但也可能返回 计算结果为的非布尔值
FALSE
,例如
0
<请 请阅读上的部分以了解更多信息 更多信息
用于测试退货 此函数的值


strpos返回int或boolean false。==运算符还将0求值为false,您希望使用===运算符(三个等号)检查所比较的类型是否相同,而不是仅仅查看它们是否可以求值为false

所以


0
是从
strpos
开始找到匹配项时可能返回的值。如果未找到匹配项,则返回
false
(布尔值)。因此,您需要使用检查值和类型的
==
运算符来检查
strpos的返回值,而不是使用只检查值的
=

我个人倾向于使用这种方法:

if (strpos($hastack, $needle) === 0)
{
    // the $needle is found at position 0 in the $haystack
}

要避免出现“
0
”位置,请始终将其设置为大于
0

干杯

如果您的代码使用非标准表示法中的非标准方式来修复标准问题,那么所有可维护性都已经离开了大楼。每一位优秀的PHP开发人员都知道并期望使用
==
符号-您的答案只不过是一个过时的性能和可读性杀手。对于strpos()来说,这个答案是最好的
if(strpos("abcdefghijklmnop","http://www.") === false) {

}
if (strpos($hastack, $needle) === 0)
{
    // the $needle is found at position 0 in the $haystack
}
if(!strpos($v,'ttp:'))$v='http://'.$v;
if(strpos(' '.$v,'http'))