String comparison
This WTF is documented but a WTF none the less:
If you compare two numerical strings, they are compared as integers.
. You need to add the definition of numerical strings to get the WTF:
Numeric strings consist of optional sign, any number of digits, optional decimal part and optional exponential part. Thus +0123.45e6 is a valid numeric value. Hexadecimal notation (0xFF) is allowed too but only without sign, decimal and exponential part.
. So for example "15" == "0xF".

Comments
Personally I haven't
Personally I haven't introduced any bugs because of this in my applications but I believe someone somewhere must have experienced some serious WTFs because of this feature.
Consider this: $s1 =
Consider this:
$s1 = "000002";
$s2 = "002";
if ($s1 == $s2) print "'$s1' and '$s2' strings are equal!\n";
in_array() also suffers from this "feature";
:((((((((((((((((((((((((((((((
Well use === when the type of
Well use === when the type of the variables to compare is relevant ... and for in_array use the 3rd and last argument "strict" which allows to take care of the types of the value you are searching.
I don't think we can call this a real WTF, as the way PHP is permissive with variable types cannot be possible without some elementary rules of types interpretation, in general it allows code to be shorter, but it's sure that with inexperienced coders this can lead to this kind of confusion.
Post new comment