On 19.08.2014 05:07, Tjerk Meesters wrote:

On Mon, Aug 18, 2014 at 11:30 PM, Johannes Schlüter
<johan...@schlueters.de <mailto:johan...@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
    <johan...@schlueters.de <mailto:johan...@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.

That's a good point, too



    johannes

    ps. yes, the example might be done nicer and better, it still represents
    a common pattern.




--
--
Tjerk

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to