Edit report at https://bugs.php.net/bug.php?id=54547&edit=1
ID: 54547 Updated by: paj...@php.net Reported by: peter dot ritt at gmx dot net Summary: wrong equality of string numbers Status: Verified Type: Bug Package: Unknown/Other Function Operating System: linux PHP Version: 5.3.6 Assigned To: dmitry Block user comment: N Private report: N New Comment: @a at hotmail dot com This is not a support channel, if you need further support for the base ideas about the loosely type nature of PHP, please ask them on one the numerous channels. Previous Comments: ------------------------------------------------------------------------ [2012-04-12 05:42:53] a at hotmail dot com @paj...@php.net How about *you* staying polite with your users by actually fixing your bugs? Can you imagine how much time is wasted worldwide as a consequence of your shortsighted "design" decisions? ------------------------------------------------------------------------ [2012-04-11 13:36:46] paj...@php.net @nik at naturalnet dot de Please stay polite with other developers. Please keep in mind that PHP is loosely typed, this is a root principle of PHP. ------------------------------------------------------------------------ [2012-04-11 13:12:14] nik at naturalnet dot de *Why* the heck is that implicit cast even done? Are PHP developers really _that_ absent-minded that they cannot write actual number literals when they want them (i.e. leave out the '')? I expect any programming language to use the data types I give it, not something it likes more! ------------------------------------------------------------------------ [2012-04-11 10:52:06] hholz...@php.net On "0xFF" == 255: since when do we actually consider hex in strings as numeric? And is this actually documented? The The "String conversion to numbers" section in the manual says: "Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits." ( http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion ) By that description 0xsomething would *not* be considered as numeric in a string context ... ------------------------------------------------------------------------ [2012-04-11 10:45:46] hholz...@php.net If we indeed want to change the behavior here (and i'm yet undecided to whether i'd want to do this or not, although slightly biased towards a 'yes): wouldn't it be easier (although probably slightly less effective performance wise) to do a string comparison first if both arguments are strings, and only fall back to numeric auto casts if the string comparison fails? If the strings really contain different numeric literals i'd expect a string comparison to fail quickly as there can only be so much digits (ok, in theory you could have up to 300+ digits, but not all of them significant). This would take care of all possible edge cases (assuming that there may be others that we aren't aware of yet, even though i can't think of any right now) and not just the overflow case at hand, and the required engine changes would probably be a single chunk only, so having better patch locality ... Or are there other places where we'd need an extended is_numeric_string check with overflow control, too? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=54547 -- Edit this bug report at https://bugs.php.net/bug.php?id=54547&edit=1