ID:               39901
 Updated by:       [EMAIL PROTECTED]
 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

Reply via email to