Re: [RFC] Binary String Comparison
| From: | Tjerk Meesters | Date: | Tue, 19 Aug 2014 03:07:59 +0000 |
| Subject: | Re: [RFC] Binary String Comparison | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-76678@lists.php.net to get a copy of this message | ||
On Mon, Aug 18, 2014 at 11:30 PM, Johannes Schlüter <johannes@schlueters.de>
wrote:
> On Mon, 2014-08-18 at 23:09 +0800, Tjerk Meesters wrote:
> > > On 18 Aug, 2014, at 10:47 pm, Johannes Schlüter <
> johannes@schlueters.de> 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.
> johannes
>
> ps. yes, the example might be done nicer and better, it still represents
> a common pattern.
>
>
--
--
Tjerk