RE: [PHP] Is there limitation for switch case: argument's value?

From: Date: Fri, 21 Aug 2009 18:33:19 +0000
Subject: RE: [PHP] Is there limitation for switch case: argument's value?
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-297063@lists.php.net to get a copy of this message
Whoa! I didn't even know you could use a switch statement like that. In 20 years of coding, I've never ever used a switch like that first "if/else" style. PHP never ceases to amaze me in it's flexibility (and ability to shoot yourself in the foot ;-p ) And remember, all your base are belong to Adam. > -----Original Message----- > From: Adam Randall [mailto:randalla@gmail.com] > Sent: Thursday, August 20, 2009 11:20 PM > To: Keith > Cc: php-general@lists.php.net > Subject: Re: [PHP] Is there limitation for switch case: > argument's value? > > I've never understood why people use switch statements like this as in > reality you are using it more like an if/else block, but anyway. > > The reason why your code is not working is that you are passing into > the switch the value of 0, or false, which means that when any of > those $sum == N conditionals comes up as false (say $sum == 8 ), then > that is what is returned because they match up. In PHP's eyes, 0 == > false in switch statements. > > To fix your code, change the switch( $sum ) to switch( true ): > > switch( true ) > { > case ($sum == 8): > echo "sum=8\n"; > break; > case ($sum == 7 || $sum == 6): > echo "sum=7 or 6\n"; > break; > case ($sum == 2 || $sum == 1): > echo "sum=2 or 1\n"; > break; > case ($sum == 0): > echo "sum=0\n"; > break; > default: > echo "sum=3/4/5\n"; > break; > } > > Or, write your switch like this: > > switch( $sum ) > { > case 8: > echo "sum=8\n"; > break; > case 6: > case 7: > echo "sum=7 or 6\n"; > break; > case 1: > case 2: > echo "sum=2 or 1\n"; > break; > case 0: > echo "sum=0\n"; > break; > default: > echo "sum=3/4/5\n"; > break; > } > > Regards, > > Adam. > > On Thu, Aug 20, 2009 at 8:40 PM, > Keith<survivor_bus@hotmail.com> wrote: > > Hi, > > I encounter a funny limitation here with switch case as below: > > The value for $sum is worked as expected for 1 to 8, but not for 0. > > When the $sum=0, the first case will be return, which is "sum=8". > > Is there any limitation / rules for switch case? Thanks for advice! > > > > Keith > > > > $sum=0; > > switch($sum) > > { > >   case ($sum==8): > >   echo "sum=8"; > >   break; > >       case ($sum==7 || $sum==6): > >       echo "sum=7 or 6"; > >       break; > >   case ($sum==2 || $sum==1): > >   echo "sum=2 or 1"; > >   break; > >       case 0: > >       echo "sum=0"; > >       break; > >   default: > >   echo "sum=3/4/5"; > >   break; > > } > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > -- > Adam Randall > http://www.xaren.net > AIM: blitz574 > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php >

« previous php.general (#297063) next »