2012/11/16 Tim Streater <[email protected]>
> On 16 Nov 2012 at 12:10, Omar Muhsin <[email protected]> wrote:
>
> > Hello,
> >
> > I was just wondering after writting the code in version 2 here below, it
> turns
> > out in testing that it actually PHP is not validating the expressions
> instead
> > always I get the first case.
> >
> > 1.Using nested if statement {THE INTENDED BEHAVIOR}:
> > if ($count > 14)
> > $boxes = 3;
> > elseif($count > 7 && $count <= 14)
>
> You don't need the count<=14 part as you will *only* get there if
> $count<=14.
>
> > $boxes = 2;
> > else
> > $boxes = 1;
> >
> > 2. Using Switch {ALWAYS FIRST CASE!!!}
> >
> > // $boxes = 1;
> > // switch ($count) {
> > // case ($count > 14):
> > // $boxes = 3;
> > // break;
> > // case ($count > 7 && $count <= 14):
> > // $boxes = 2;
> > // break;
> > // case ($count <= 7):
> > // default :
> > // $boxes = 1;
> > // break;
> > // }
> >
> >
> > Does anyone know the answer why using the Switch it always execute the
> first
> > case ?
>
> As has been pointed out you need switch(true).
>
> That's a strange way of writing a switch, IMO. You should be using the if
> version.
>
Hi,
I've seen looooong discussions about this ;) I think this one is a example,
where 'switch(true)' is a legit expression, because switch-statements
define a construct, where the interpreter should select one of multiple
similar cases. This one seems legit, because they are very similar ;) It
says "In case of $count look like X do this, or $count look like Y do that,
or $count look like Z do something else (and so on)". For such I find the
if-elseif-elseif-elseif-elseif-else-construction quite confusing.
Beside this it can be rewritten as
switch ((int) (($count-1) / 7) {
case 0: // 1-7
case 1: // 8 - 14
default: // above 15
}
Regards,
Sebastian
>
> --
> Cheers -- Tim
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
github.com/KingCrunch