这是PHP中的错误吗?

时间:2011-03-15 07:59:13

标签: php string

<?php

if(stripos('http://cp.uctorrent.com', 'cp.utorrent.com') >= 0){
    echo "Good1";
}else{
     echo "Bad1";
}

if(stripos('http://uctorrent.com', 'cp.utorrent.com') >= 0){
    echo "Good2";
}else{
    echo "Bad2";
}

?>

输出

  

Good1Good2

然而它应该是

  

Good1Bad2

8 个答案:

答案 0 :(得分:7)

<?php
  if(false >= 0) echo "Good";
  else echo "Bad";
  // this code prints Good
?>

这不是一个错误,它是一个“奇怪的”布尔转换。

stripos在找不到字符串时返回false,false在PHP中转换为0。

直接来自documentation(问题是相反的):

  

警告此功能可能会返回   布尔值为FALSE,但也可能返回一个   非布尔值,其值为   FALSE,例如0或“”。请阅读   关于布尔人的部分了解更多   信息。使用===运算符   测试这个的返回值   功能

答案 1 :(得分:2)

如果2 stripos返回false,则搜索失败,false0相比时返回true

正确的方法是使用身份运算符来检查类型和值:

if(stripos('http://cp.uctorrent.com','cp.utorrent.com') !== false)
  echo "Good1";                                         ^^^^^^^^^^
else 
  echo "Bad1";

答案 2 :(得分:2)

阅读手册会有很大帮助:

  

警告

     

此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。 使用===运算符测试此函数的返回值。

答案 3 :(得分:1)

  

如果未找到needle,stripos()将返回布尔值FALSE。

http://php.net/manual/en/function.stripos.php

PHP中的布尔值FALSE等于整数0,即>= 0

答案 4 :(得分:1)

如果要检查stripos是否无法匹配,则需要使用!==或===测试类型值,例如:

<?php

if(stripos('http://cp.uctorrent.com','cp.utorrent.com')!==false)echo "Good1";
else echo "Bad1";

if(stripos('http://uctorrent.com','cp.utorrent.com')!==false)echo "Good2";
else echo "Bad2";

?>

答案 5 :(得分:1)

再次尝试这一点,避免微优化功能使用模式引起的问题:

if (stristr('http://cp.uctorrent.com', 'cp.utorrent.com')) {
   echo "Good1";
}
else {
   echo "Bad1";
}

答案 6 :(得分:0)

低于$ p的值为'false'(表示0),因此它是&gt; = 0

$p = stripos('http://uctorrent.com','cp.utorrent.com');

你需要检查stripos('http://uctorrent.com','cp.utorrent.com')!== false先获得$ p(找到位置),如上所述......

答案 7 :(得分:0)

utorrent <---> uctorrent
我是个白痴......

这是法术错误......

将uctorrent与utorrent进行比较

抱歉每个人