Clicked Send too fast. For the suggestion box, let me instead suggest that for string $s and float $f: $s == $f (a string being compared to a float) be the same as (string)(float)$s === (string)$f instead of (float)$s === $f (as it is today if my understanding is correct)
Since the current behavior is effectively undefined in any case in which the two interpretations would give different results, I'd guess that change could probably be made without breaking BC. The only problem would be if someone relied on the change and their code was run on an old version of php. I'll go back to my corner now. Thanks for listening... - Todd On Fri, 2008-04-11 at 22:59 -0700, Todd Ruth wrote: > I'd take that as proof of a design flaw in having php > doing string to float comparison by casting the string to > float instead of the float to a string, but you've got > me - the documentation does say the string will be converted > to a float and not vice-versa. If it wouldn't be a bad BC > break, I think there'd be a lower WTF by doing the cast > the other way. "==" means are they the same and "===" > means are they the SAME. With "==", '1.8' should match > any float that would be displayed as 1.8. (Of course, > with "===" they aren't even the same type, so you're > false from the start.) I say "should" from an anti-WTF > perspective. Again, I must bow to the spec and you have > me there. > > Thanks for saving me the hours of discovering all this > via debugging. Please consider the switching of casts > for string==float for the suggestion box. > > - Todd > > On Fri, 2008-04-11 at 20:29 -0700, Rasmus Lerdorf wrote: > > There is no bug here. Please read: > > > > http://docs.sun.com/source/806-3568/ncg_goldberg.html > > > > -Rasmus > > > > Todd Ruth wrote: > > > I'm thinking there must be a bug in the heart of php > > > causing this. I'll debug it, but I haven't looked at > > > php source code in a few years and would like a tip as > > > to which files are involved in evaluating "==". Here > > > is a fragment from my code and the output: > > > > > > ... > > > print "<pre>\n"; > > > var_dump($max); > > > var_dump($nms); > > > var_dump($nms == $max); > > > $max = (float)$max; > > > $nms = (string)$nms; > > > var_dump($max); > > > var_dump($nms); > > > var_dump($nms == $max); > > > $max = (string)$max; > > > $nms = (float)$nms; > > > var_dump($max); > > > var_dump($nms); > > > var_dump($nms == $max); > > > print "</pre>\n"; > > > ... > > > > > > string(3) "1.8" > > > float(1.8) > > > bool(false) > > > float(1.8) > > > string(3) "1.8" > > > bool(true) > > > string(3) "1.8" > > > float(1.8) > > > bool(true) > > > > > > I found this using php 5.2.3. I just upgraded to php 5.2.5 > > > and am receiving the exact same result. Obviously, I can't > > > reproduce it with a simple var_dump("1.8"==1.8). :( > > > I guess something is getting corrupted, and I will add debug > > > output until I find out what (or Murphy removes the problem > > > by adding debug output; then I'm not sure what I'll do). > > > > > > Thanks for any tips on which files I should look at it. > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php