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?
Yes, this is correct / expected behavior :
strpos
can return 0
when there is a match at the beginning of the stringfalse
when there is no matchThe 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 toFALSE
, such as0
or""
.
Please read the section on Booleans for more information.
Use the===
operator for testing the return value of this function.