Edit report at http://bugs.php.net/bug.php?id=8428&edit=1

 ID:                 8428
 Updated by:         j...@php.net
 Reported by:        ocomte at guarantycity dot com
 Summary:            continue doesn't pass thru a switch statement
-Status:             Open
+Status:             Wont fix
 Type:               Feature/Change Request
-Package:            Feature/Change Request
+Package:            *General Issues
 Operating System:   Solaris 7
 PHP Version:        4.0.3pl1
 Block user comment: N
 Private report:     N

 New Comment:

You need to pass the level here:



<?php 



for($i=0; $i<5; ++$i)

{       switch(1)

   {       case 1:

             continue 2;

   }

   echo "Not printable";

}

?>



This code won't output anything. Documented issue also.


Previous Comments:
------------------------------------------------------------------------
[2001-01-05 23:04:15] z...@php.net

The desired behavior is that continue is transparent to switch
statements - this behavior would mimic how if handles continue
statements.





------------------------------------------------------------------------
[2001-01-05 22:33:45] z...@php.net

The switch statement is a flow control construct - like for or if. 
Because of this continue behaves within switch like it should in any
flow control contruct - it skips to the next loop of the construct. 
However, switch does not loop - so continue behaves like break.



If you would like to use a continue embedded in a switch statement to
continue past a loop in an outside control construct, specify how many
levels you would like continue to break out of.



Try these examples to see what I mean:



<pre>

<?php

    for ($i=0; $i<5; ++$i)

    {

        switch(1)

        {

            case 1:

                continue 2;

                break;

        }



        echo "Should be skipped";

    }



    // Should not output anything



    for ($i=0; $i<5; ++$i)

    {

        for ($z=10; $z>5; --$z)

        {

            switch(1)

            {

                case 1:

                    continue 2;

                    break;

            }

            echo "\$z=$z\n";

        }

        echo "\$i=$i\n";

    }

    

    /*

        Should output:

            $i=0

            $i=1

            $i=2

            $i=3

            $i=4

    */

?>







------------------------------------------------------------------------
[2000-12-26 13:34:59] ocomte at guarantycity dot com

in the script :

<?

        for($i=0; $i<5; ++$i)

        {       switch(1)

                {       case 1:

                                continue;

                }

                echo "Not printable";

        }

?>



the string is printed 5 times because the continue statement end the
switch (like break). In C and C++, and in the PHP manual the continue
(unlike break) isn't affected by surrounding switch statement and it
seems logical to me.



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=8428&edit=1

Reply via email to