if(strpos("http://www.example.com","http://www.")==0){ // do work}
Run Code Online (Sandbox Code Playgroud)
我希望这能解决它的真实性.但是当我这样做时会发生什么
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Run Code Online (Sandbox Code Playgroud)
这也传递了PHP 5,因为我可以解决strpos返回false,转换为0.
这是正确的思考/行为吗?如果是这样,那么测试子字符串的解决方法是在另一个字符串的开头?
Pas*_*TIN 51
是的,这是正确/预期的行为:
strpos0当字符串开头有匹配时可以返回false当没有匹配时它会返回事情是你不应该==用来比较0和false; 你应该使用===,像这样:
if(strpos("abcdefghijklmnop","http://www.") === 0) {
}
Run Code Online (Sandbox Code Playgroud)
要么 :
if(strpos("abcdefghijklmnop","http://www.") === false) {
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅比较运算符:
$a == $b会TRUE如果$a等于$b.$a === $b将TRUEif $a等于$b,并且它们属于同一类型.并且,引用手册页strpos:
此函数可能返回布尔值
FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或"". 有关更多信息,
请阅读有关布尔值的部分.
使用该===运营商的测试此函数的返回值.
Ign*_*ams 11
===并!==比较类型和值:
if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work}
Run Code Online (Sandbox Code Playgroud)
strpos返回一个int或boolean false.==运算符也计算0表示false,你想使用===运算符(三个等号),它还检查被比较的类型是否相同,而不仅仅是看它们是否可以被评估为相同.
所以
if (strpos($hastack, $needle) === 0)
{
// the $needle is found at position 0 in the $haystack
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40400 次 |
| 最近记录: |