1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<sect1 xml:id="control-structures.continue" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>continue</title>
<?phpdoc print-version-for="continue"?>
<simpara>
<literal>continue</literal> is used within looping structures to
skip the rest of the current loop iteration and continue execution
at the condition evaluation and then the beginning of the next iteration.
</simpara>
<note>
<simpara>
In PHP the
<link linkend="control-structures.switch">switch</link> statement is
considered a looping structure for the purposes of
<literal>continue</literal>. <literal>continue</literal> behaves like
<literal>break</literal> (when no arguments are passed) but will
raise a warning as this is likely to be a mistake. If a
<literal>switch</literal> is inside a loop,
<literal>continue 2</literal> will continue with the next iteration
of the outer loop.
</simpara>
</note>
<simpara>
<literal>continue</literal> accepts an optional numeric argument
which tells it how many levels of enclosing loops it should skip
to the end of. The default value is <literal>1</literal>, thus skipping
to the end of the current loop.
</simpara>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six'];
foreach ($arr as $key => $value) {
if (0 === ($key % 2)) { // skip members with even key
continue;
}
echo $value . "\n";
}
?>
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
one
three
five
]]>
</screen>
<programlisting role="php">
<![CDATA[
<?php
$i = 0;
while ($i++ < 5) {
echo "Outer\n";
while (1) {
echo "Middle\n";
while (1) {
echo "Inner\n";
continue 3;
}
echo "This never gets output.\n";
}
echo "Neither does this.\n";
}
?>
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner
]]>
</screen>
</informalexample>
</para>
<para>
Omitting the semicolon after <literal>continue</literal> can lead to
confusion. Here's an example of what you shouldn't do.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
continue
print "$i\n";
}
?>
]]>
</programlisting>
<para>
One can expect the result to be:
</para>
<screen>
<![CDATA[
0
1
3
4
]]>
</screen>
</informalexample>
</para>
<para>
<table>
<title>Changelog for <literal>continue</literal></title>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.3.0</entry>
<entry>
<literal>continue</literal> within a <literal>switch</literal> that is attempting to act like a <literal>break</literal> statement for the
<literal>switch</literal> will trigger an <constant>E_WARNING</constant>.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|