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'))