ID: 39901
User updated by: schizoduckie at gmail dot com
Reported By: schizoduckie at gmail dot com
Status: Bogus
Bug Type: Variables related
Operating System: Win32/XP
PHP Version: 5CVS-2006-12-20 (snap)
New Comment:
I agree that this is expected behavior for loosly typed variables. but
i am CASTING explicity to String because i want it to be treated as
string, which should trigger the switch to work as ===
Previous Comments:
------------------------------------------------------------------------
[2006-12-20 13:20:45] [EMAIL PROTECTED]
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.
------------------------------------------------------------------------
[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