1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
2026-02-06 18:26:07 +03:00

102 lines
3.9 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 53fb200fed6d316b0616a915eb87a40de1d80f51 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="control-structures.do.while" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>do-while</title>
<?phpdoc print-version-for="dowhile"?>
<simpara>
Циклы <literal>do-while</literal> похожи на циклы <literal>while</literal>,
за исключением того, что истинность выражения проверяется в конце каждой итерации, а не в начале.
Основное отличие от стандартных циклов <literal>while</literal> состоит в том,
что первая итерация цикла <literal>do-while</literal> гарантированно выполняется,
поскольку истинность выражения проверяется только в конце итерации, тогда как в стандартном
цикле <literal>while</literal> выполнение первой итерации необязательно, поскольку истинность выражения
проверяется в начале каждой итерации, и если с са́мого начала выражение окажется ложным
и примет значение &false;, выполнение цикла немедленно завершится.
</simpara>
<para>
Единственный синтаксис цикла <literal>do-while</literal>:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$i = 0;
do {
echo $i;
} while ($i > 0);
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
В примере цикл выполнится ровно один раз, потому что после
первой итерации выражения оценивается как ложное
(переменная <varname>$i</varname> не больше 0) и принимает значение &false;,
а выполнение цикла завершается.
</simpara>
<para>
Разработчики с опытом программирования на языке C
при работе с циклом <literal>do-while</literal> пользуются
подходом, который останавливает выполнение циклов в середине блоков кода.
Для этого блок кода оборачивают конструкцией <literal>do-while</literal> (0)
и указывают в блоке инструкцию <link linkend="control-structures.break"><literal>break</literal></link>.
Следующий фрагмент кода демонстрирует этот подход:
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
do {
if ($i < 5) {
echo "Значение переменной \$i ещё недостаточно велико";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
echo "Теперь значение переменной \$i в порядке";
/* Обрабатываем переменную $i */
} while (0);
?>
]]>
</programlisting>
</informalexample>
</para>
<simpara>
Вместо этого «хака» иногда пользуются оператором
<link linkend="control-structures.goto"><literal>goto</literal></link>.
</simpara>
</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
-->