php strpos() difference between returning 0 and false?
php, strpos
Solution
Yes, this is correct / expected behavior :
- `strpos` can return `0` when there is a match at the beginning of the string
- and it will return `false` when there is no match
The thing is you should not use `==` to compare `0` and `false` ; you should use `===`, like this :
if(strpos("abcdefghijklmnop","http://www.") === 0) {
}
Or :
if(strpos("abcdefghijklmnop","http://www.") === false) {
}
For more informations, see Comparison Operators :
- `$a == $b` will be `TRUE` if `$a` is equal to `$b`.
- `$a === $b` will be `TRUE` if `$a` is equal to `$b`, and they are of the same type.
And, quoting the manual page of `strpos` :
This function may return Boolean `FALSE`, but may also return a non-Boolean value which evaluates to `FALSE`, such as `0` or `""`. Please read the section on Booleans for more information. Use the `===` operator for testing the return value of this function.
Problem
``` if(strpos("http://www.example.com","http://www.")==0){ // do work} ``` I'd expect this to resolve as true, which it does. But what happens when I do ``` if(strpos("abcdefghijklmnop","http://www.")==0){// do work} ``` This also passes on php 5 because as far as I can work out the strpos returns false which translates as 0. Is this correct thinking/behaviour? If so what is the workaround for testing for that a substring is at the beginning of another string?