Bug #44999 [Nab]: switch statement uses equivalence

From: Date: Mon, 16 Sep 2013 14:49:57 +0000
Subject: Bug #44999 [Nab]: switch statement uses equivalence
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-181603@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=44999&edit=1

 ID:                 44999
 User updated by:    ethan dot nelson at ltd dot org
 Reported by:        ethan dot nelson at ltd dot org
-Summary:            0 equals any string
+Summary:            switch statement uses equivalence
 Status:             Not a bug
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   windows 2003
 PHP Version:        5.2.6
 Block user comment: N
 Private report:     N

 New Comment:

This is not about equivalency vs identical operators.  They have defined behavior working according
to definition.

This is about the fact that the switch statement works using equivalency and there is no way to push
it to use identical instead.  This leads to unpredictable results when you would expect a default
case to execute but instead a "case 0" executes.  This is due to so many things proving
"equivalent" to zero, including null.

There should be a way to push switch to use identical or a "switchs" statement for switch
strict.


Previous Comments:
------------------------------------------------------------------------
[2013-09-15 04:08:49] eric dot alex dot dube at gmail dot com

It seems object do behave the way one would expect strings to (furthering the 
inconsistency imo), as demonstrated by this example:

class Tester {
}
$tester = new Tester();

var_dump(0 == $tester); // false
echo "<br />";
var_dump(0 == false); // true
echo "<br />";
var_dump(false == $tester); // false
echo "<br />";

------------------------------------------------------------------------
[2013-09-15 03:58:53] eric dot alex dot dube at gmail dot com

I see this as the biggest inconsistency:
var_dump(0 == "uno"); // true
var_dump(0 == false); // true
var_dump(false == "uno"); // false

While perhaps not a bug by strict definition, I think it's definitely an error in 
design.

------------------------------------------------------------------------
[2013-04-21 21:44:35] contact at caus909 dot net

Maybe because that's not a bug... "It's not a bug, it's a feature".
Equality (==) and identity (===) are different, if for your use, equality is the 
best, just use it then.

------------------------------------------------------------------------
[2013-02-14 16:49:14] radamanf at gmail dot com

I can see that it's no any logical explanation to keep this BUG unfixed! Status: Not a bug
-> why??? It's not funny, so many years past.

I do love to use PHP and like that no needed to define variable types, but this is generic FAIL.

Come one guys, someone need to fix this, please.

My PHP version
PHP 5.3.10-1ubuntu3.5 with Suhosin-Patch (cli) (built: Jan 18 2013 23:45:59)

------------------------------------------------------------------------
[2012-08-24 08:16:07] bugs dot php dot net at simoneast dot net

This is quite ridiculous.  Can this 'feature' of PHP *please* be reconsidered?

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


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=44999


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


Thread (9 messages)

« previous php.bugs (#181603) next »