Re: switch case - to require the break statements seems strange to me

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I wonder if this is a shared trait between C and PHP (since I understand PHP
is written in C) that the break; and the default: are placed for good
practice in all switch statements since they prevent memory leaks?

2008/9/10 Jochem Maas <jochem@xxxxxxxxxxxxx>

> tedd schreef:
>
> At 6:46 PM -0600 8/31/08, Govinda wrote:
>>
>>> Not that it is an issue, but just to understand the logic-
>>> Why do we have to use 'break' statements in each case?
>>>
>>> switch ($i) {
>>> case 0:
>>>    echo "i equals 0";
>>>    break;
>>> case 1:
>>>    echo "i equals 1";
>>>    break;
>>> case 2:
>>>    echo "i equals 2";
>>>    break;
>>> }
>>>
>>> all 3 cases fire, even though $i only equals ONE of those case values (if
>>> I said that right).
>>> I mean if $i==1, then in other languages I don't expect the first or last
>>> case to fire!  (?)
>>> Is the purpose just so one has the OPTION of letting them all fire, and
>>> turning that off with 'break'?
>>> Or is there a better reason?
>>>
>>> -G
>>>
>>
>>
>> The "break" is to separate each case (i.e., condition)
>>
>> The switch ($i) isn't even needed if you do it like this:
>>
>> switch (true)
>>   {
>>   case $i==0:
>>    echo "i equals 0";
>>    break;
>>
>>   case $i==1:
>>    echo "i equals 1";
>>    break;
>>
>>   case $i==2:
>>    echo "i equals 2";
>>    break;
>>   }
>>
>
> this is 'true' ;-) and works very well when you want to
> check disparate truths but there are caveats:
>
> 1. it's less performant IIRC
> 2. there is no type checking, so auto-casting occurs during the
> test of each case's expression
> 3. it will become even less performant ... someone clever sod has
> a patch that heavily optimizes 'simple' switch statements ... see
> the internal mailing list archives for details (I can't remember the
> details) ... I gather this patch will eventually make it into the core,
> if it hasn't already.
>
>
>> If you wanted to combine conditions, you could do this:
>>
>> switch (1)
>>   {
>>   case $i==-2:
>>   case $i==-1:
>>   case $i==0:
>>
>>    echo "i is less than 0 but greater than -3 and is a counting number
>> (i.e., no fraction)";
>>    break;
>>
>>   case $i==1:
>>    echo "i equals 1";
>>    break;
>>
>>   case $i==2:
>>    echo "i equals 2";
>>    break;
>>   }
>>
>>
>> Typed without checking and after my vacation.
>>
>> Cheers,
>>
>> tedd
>>
>>
>
> --
>  PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
Luke Slater

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux