#39901 [Opn->Bgs]: casting of string with numbers in it still does INT conversion
| From: | tony2001@php.net | Date: | Wed, 20 Dec 2006 13:20:46 +0000 |
| Subject: | #39901 [Opn->Bgs]: casting of string with numbers in it still does INT conversion | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-106637@lists.php.net to get a copy of this message | ||
ID: 39901
Updated by: tony2001@php.net
Reported By: schizoduckie at gmail dot com
-Status: Open
+Status: Bogus
Bug Type: Variables related
Operating System: Win32/XP
PHP Version: 5CVS-2006-12-20 (snap)
New Comment:
switch() construct uses "==" semantics to compare values, which
compares numeric strings as numbers:
var_dump("0123"=="123"); => true
If you want to compare numeric strings as strings, use "===":
var_dump("0123"==="123"); => false.
This is expected behaviour.
Previous Comments:
------------------------------------------------------------------------
[2006-12-20 13:16:41] schizoduckie at gmail dot com
Description:
------------
In a switch, a value that is declared as string with a prefix 0 will
automatically disappear in switched values, even if all of them are
specifically casted as a string.
Reproduce code:
---------------
$field = (string)"0123";
settype($field, 'string'); // just to make sure, for testcase
switch ($field)
{
case '123': $result = 'first'; break;
case '456': $result = 'second'; break;
default: $result = 'third'; break;
}
echo $result; // first, due to string / int conversion.
switch ((string)$field) // explicit cast to string
{
case (string)'123': $result = 'first'; break; // more (unneccesary
casts just to be sure)
case (string)'456': $result = 'second'; break;
default: $result = 'third'; break;
}
echo $result; // first! ????
Expected result:
----------------
I would have expected the last result echo to be third because of the
explicit typecasting.
This problem appears in all php versions up to 5.2 snapshot of today.
Actual result:
--------------
the code in the example speaks for itself.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=39901&edit=1