Re: [PHP-DEV] [RFC] Binary String Comparison
[email protected] (Marc Bennewitz)
| Newsgroups | php.internals |
|---|---|
| Message-ID | <[email protected]> |
On 19.08.2014 05:07, Tjerk Meesters wrote: > > On Mon, Aug 18, 2014 at 11:30 PM, Johannes Schlüter > <[email protected] <mailto:[email protected]>> wrote: > > On Mon, 2014-08-18 at 23:09 +0800, Tjerk Meesters wrote: > > > On 18 Aug, 2014, at 10:47 pm, Johannes Schlüter > <[email protected] <mailto:[email protected]>> wrote: > > > > > >> On Mon, 2014-08-18 at 14:44 +0200, Marc Bennewitz wrote: > > >> The question isn't "What's wrong with ===, strcmp()?" but > "What's wrong > > >> with ==, <, >?". > > >> > > >> We have a standard way to compare two operands but currently > we do some > > >> magic things to solve something that don't need to be solved. > > > > > > Still it is a key property of the language which we can't > simply change. > > > Also mind this: All input data are strings and some databases also > > > return data as string. So code like > > > > > > if ($_GET['id'] > 0) > > > or > > > if ($db->fetchRow()[0] == 12) > > > > > > which is common will break. > > > > Those two cases will actually not be affected, it's strictly > string<=>string comparisons that's being discussed here. > > Meaning that simple code you find everywhere, in every second tutorial > > foreach ($db->query("SELECT id, title FROM entries") as $row) { > echo "<tr><td"; > if ($row[0] == $_GET['highlight_id']) { > echo " background='#ff0000'"; > } > echo ">".htmlentities($row[1])."</td></tr>"; > } > > will suddenly fail. How wonderful! (irony) > > > Not necessarily and certainly not by definition; reasons for failure are > less obvious such as (but not limited to): > > "0" == "0.0" > "11" == " 11" (but note that "11" == "11 " currently yields false) > "0" == "" > > I'm not arguing for or against this behaviour change, but I found it > necessary to clear up some apparent confusion as to what repercussions > this proposal carries. > > Another approach of attempting to solve the common issue of comparing > big numbers with '==' is to only enforce string-wise comparison if a > number cast would cause precision loss. That's a good point, too > > > johannes > > ps. yes, the example might be done nicer and better, it still represents > a common pattern. > > > > > -- > -- > Tjerk