Bug->Req #39579 [Nab]: Comparing zero & string values in boolean comparison has unexpected behaviour

From: Date: Thu, 14 Feb 2013 22:52:25 +0000
Subject: Bug->Req #39579 [Nab]: Comparing zero & string values in boolean comparison has unexpected behaviour
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-176638@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=39579&edit=1

 ID:                 39579
 User updated by:    iain at workingsoftware dot com dot au
 Reported by:        iain at workingsoftware dot com dot au
 Summary:            Comparing zero & string values in boolean comparison
                     has unexpected behaviour
 Status:             Not a bug
-Type:               Bug
+Type:               Feature/Change Request
 Package:            Variables related
 Operating System:   FreeBSD 6.1
 PHP Version:        5.2.0
 Block user comment: N
 Private report:     N

 New Comment:

Sorry I meant to submit this as "Feature/Change Request" but submitted the form 
without a password and it changed back to "bug".


Previous Comments:
------------------------------------------------------------------------
[2013-02-14 22:50:15] iain at workingsoftware dot com dot au

Hi, I agree this shouldn't be changed. It's pretty fundamental to how PHP works 
and since reporting this bug 6 
years ago I've learned a lot more about PHP :)

I still think my suggestion of emitting a Notice whenever a string is converted 
to 0 as a result of being 
evaluated in a numeric context isn't too outlandish though.

*Changing* the way that strings are evaluated would break a buttload of code and 
isn't really productive.

Emitting a Notice would help people unfamiliar with the implicit typecasting 
behaviour save some time and 
avoid bugs when developing. For those that like to write "clean code" with no 
Notices there is a very simple 
way of suppressing it (ie. use === or (int)).

Also, emitting a notice wouldn't actually break any code, although it might 
cause a number of scripts out in 
the wild to become more verbose in their logging - is that not an acceptable 
risk?

The notice could even say something like:

Notice: String evaluated to 0 (zero) when used in numeric context on line 
WHATEVER. Use === or (int) to 
prevent this notice.

This would enable people to quickly understand the behaviour (which is kind of 
unintuitive but fair enough 
when you look at PHPs type system - just a foible of the language everyone 
should learn) and encourage people 
to learn the importance of === earlier on.

------------------------------------------------------------------------
[2013-02-14 17:26:40] radamanf at gmail dot com

I've seen a topic in the web: http://josephscott.org/archives/2012/03/why-php-strings-equal-zero/
related to this bug, and I can see that sometimes string need to be compared with integer as integer
BUT this is a huge pool of potential bugs across all the worldwide! :) Can you imagine how many
people usign PHP without realizing this BUG ! :)_) I'm sure this is a loved BUG by most hackers
out there !

------------------------------------------------------------------------
[2013-02-14 17:24:51] nikic@php.net

@radamanf: Stop shouting. Shouting does not help.

I agree that this behavior ('foo' == 0) is counter-productive. I think most people would
agree on that. But even if everyone agrees that it's the wrong behavior, changing it isn't
so easy. Changing this behavior will probably break existing software.

If you really want to change this, then there is only one way: Make the change and then test a
shitload of code against it. See how many tests will fail in major PHP projects and how easy things
are to fix.

If you can provide sufficient data that this change (which goes rather deep into the core semantics
of the language) won't affect existing projects heavily, then I see no problem with doing it.

------------------------------------------------------------------------
[2013-02-14 17:14:35] radamanf at gmail dot com

Related To: Bug #39579

------------------------------------------------------------------------
[2013-02-14 17:14:35] radamanf at gmail dot com

This is a epic FAIL in pure logic of comparing formats not having explicitly defining them, whole
beauty of PHP disappear! This is BROKEN LOGIC.

Connected BUGS
Bug #44990
Bug #39579

Different people are coming across this BUG and thinking the same as me, so please CHANGE your
documentation, it's WRONG! Who is this "GENIES" to make possible converting String to
Integer NOT INT TO STRING!

Guys, I'm very disappointed! :)

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=39579


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=39579&edit=1


Thread (29 messages)

« previous php.bugs (#176638) next »