This is what I really hate about PHP:
pilif@galadriel ~ % cat test.php <? if (10 == '10ABC') echo "Gnegg!n"; ?> pilif@galadriel ~ % php test.php Gnegg!
This is the reason for a pretty serious bug in my current i’m-loving-doing-that-as-it’s-the-greatest-ever-project
What happens is that PHP implicitly converts 10ABC to an integer (yielding 10) and then making an integer comparison.
In my oppinion, this is wrong as inplicitely converting a string to an integer can cause information to be lost. Would PHP have converted 10 to ’10’, the comparison would have worked like one expects because converting an intger to a string works without losing information.
Then again, integer-conversions are more accurate than string conversions, so I can understand PHP’s way. What I cannot understand is that a non-integer string is converted to something else than 0 or nothing (while causing a runtime-error). The comparison in my example should never have evaluated to a true value (which happened, because intval('10abc') == 10!
And converting to string if one argument of a comparison is a string is not the holy grail either – problems with locale-specific decimal points come to mind (is it . or ,?).
So perls idea of using a dedicated string comparison operator may not have been a bad idea after all…