Req #8428 [Com]: continue doesn't pass thru a switch statement
| From: | teo8976 at gmail dot com | Date: | Sat, 21 Feb 2015 19:05:04 +0000 |
| Subject: | Req #8428 [Com]: continue doesn't pass thru a switch statement | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-190871@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=8428&edit=1
ID: 8428
Comment by: teo8976 at gmail dot com
Reported by: ocomte at guarantycity dot com
Summary: continue doesn't pass thru a switch statement
Status: Wont fix
Type: Feature/Change Request
Package: *General Issues
Operating System: Solaris 7
PHP Version: 4.0.3pl1
Block user comment: N
Private report: N
New Comment:
The documentation is utterly unclear about this.
See https://bugs.php.net/bug.php?id=69099
Previous Comments:
------------------------------------------------------------------------
[2010-12-14 11:36:23] jani@php.net
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.
------------------------------------------------------------------------
[2001-01-05 23:04:15] zak@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] zak@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 https://bugs.php.net/bug.php?id=8428&edit=1