Re: [RFC] Binary String Comparison
| From: | Marc Bennewitz | Date: | Wed, 20 Aug 2014 09:21:32 +0000 |
| Subject: | Re: [RFC] Binary String Comparison | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-76722@lists.php.net to get a copy of this message | ||
On 19.08.2014 05:07, Tjerk Meesters wrote:
On Mon, Aug 18, 2014 at 11:30 PM, Johannes Schlüter <johannes@schlueters.de <mailto: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 <mailto: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 wrongwith ==, <, >?". We have a standard way to compare two operands but currently
we do somemagic 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
johannesps. yes, the example might be done nicer and better, it still represents a common pattern.-- -- Tjerk