mirror of
https://github.com/php/doc-ru.git
synced 2025-08-20 16:51:35 +00:00
Added unreviewed translation.
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@317485 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
252
language/control-structures/switch.xml
Normal file
252
language/control-structures/switch.xml
Normal file
@ -0,0 +1,252 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 88a88985b966ce3acdc7835984636921e862e4c2 Maintainer: mch Status: ready -->
|
||||
<!-- $Revision$ -->
|
||||
<!-- Reviewed: no -->
|
||||
|
||||
<sect1 xml:id="control-structures.switch" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title><literal>switch</literal></title>
|
||||
<?phpdoc print-version-for="switch"?>
|
||||
<simpara>
|
||||
Оператор <literal>switch</literal> подобен серии операторов IF
|
||||
с одинаковым условием. Во многих случаях вам может понадобиться
|
||||
сравнивать одну и ту же переменную (или выражение) с множеством
|
||||
различных значений, и выполнять различные участки кода в зависимости
|
||||
от того, какое значение принимает эта переменная (или выражение). Это
|
||||
именно тот случай, для которого удобен оператор <literal>switch</literal>.
|
||||
</simpara>
|
||||
<note>
|
||||
<simpara>
|
||||
Обратите внимание, что в отличие от некоторых других языков, оператор
|
||||
<link linkend="control-structures.continue">continue</link> применяется в
|
||||
конструкциях switch и действует подобно оператору <literal>break</literal>.
|
||||
Если у вас конструкция switch находится внутри цикла, и вам необходимо
|
||||
перейти к следующей итерации цикла, используйте <literal>continue 2</literal>.
|
||||
</simpara>
|
||||
</note>
|
||||
<note>
|
||||
<para>
|
||||
Заметьте, что конструкция swich/case использует
|
||||
<link linkend="types.comparisions-loose">неточные сравнения (==)</link>.
|
||||
</para>
|
||||
</note>
|
||||
<para>
|
||||
Следующие два примера иллюстрируют два различных способа
|
||||
написать то же самое. Один использует серию операторов <literal>if</literal> и
|
||||
<literal>elseif</literal>, а другой -- оператор <literal>switch</literal>:
|
||||
<example>
|
||||
<title>Оператор <literal>switch</literal></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
if ($i == 0) {
|
||||
echo "i равно 0";
|
||||
} elseif ($i == 1) {
|
||||
echo "i равно 1";
|
||||
} elseif ($i == 2) {
|
||||
echo "i равно 2";
|
||||
}
|
||||
|
||||
switch ($i) {
|
||||
case 0:
|
||||
echo "i равно 0";
|
||||
break;
|
||||
case 1:
|
||||
echo "i равно 1";
|
||||
break;
|
||||
case 2:
|
||||
echo "i равно 2";
|
||||
break;
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>Оператор <literal>switch</literal> допускает сравнение со строками</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
switch ($i) {
|
||||
case "яблоко":
|
||||
echo "i это яблоко";
|
||||
break;
|
||||
case "шоколадка":
|
||||
echo "i это шоколадка";
|
||||
break;
|
||||
case "пирог":
|
||||
echo "i это пирог";
|
||||
break;
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
Важно понять, как оператор <literal>switch</literal> выполняется,
|
||||
чтобы избежать ошибок. Оператор <literal>switch</literal> исполняет
|
||||
строчка за строчкой (на самом деле выражение за выражением).
|
||||
В начале никакой код не исполняется. Только в случае
|
||||
нахождения оператора <literal>case</literal>, значение которого
|
||||
совпадает со значением выражения в операторе <literal>switch</literal>,
|
||||
PHP начинает исполнять операторы. PHP продолжает исполнять операторы
|
||||
до конца блока <literal>switch</literal> либо до тех пор, пока не
|
||||
встретит оператор <literal>break</literal>. Если вы не напишете
|
||||
оператор <literal>break</literal> в конце секции case, PHP будет продолжать
|
||||
исполнять команды следующей секции case. Например :
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
switch ($i) {
|
||||
case 0:
|
||||
echo "i равно 0";
|
||||
case 1:
|
||||
echo "i равно 1";
|
||||
case 2:
|
||||
echo "i равно 2";
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<simpara>
|
||||
В этом примере, если <varname>$i</varname> равно 0, то PHP исполнит все операторы echo!
|
||||
Если <varname>$i</varname> равно 1, PHP исполнит два последних оператора echo.
|
||||
Вы получите ожидаемое поведение оператора ('i равно 2' будет отображено) только, если
|
||||
<varname>$i</varname> будет равно 2. Таким образом, важно не забывать об операторах
|
||||
<literal>break</literal> (даже если вы, возможно, хотите избежать его использования по назначению
|
||||
при определенных обстоятельствах).
|
||||
</simpara>
|
||||
<simpara>
|
||||
В операторе <literal>switch</literal> выражение вычисляется
|
||||
один раз и этот результат сравнивается с каждым оператором
|
||||
<literal>case</literal>. В выражении <literal>elseif</literal>,
|
||||
выражение вычисляется снова. Если ваше условие более сложное,
|
||||
чем простое сравнение и/или находится в цикле, конструкция
|
||||
<literal>switch</literal> может работать быстрее.
|
||||
</simpara>
|
||||
<para>
|
||||
Список операторов для исполнения в секции case также может быть пустым, что просто
|
||||
передает управление списку операторов в следующей секции case.
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
switch ($i) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
echo "i меньше чем 3, но неотрицательно";
|
||||
break;
|
||||
case 3:
|
||||
echo "i равно 3";
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>
|
||||
Специальный вид конструкции case -- <literal>default</literal>. Сюда управление попадает
|
||||
тогда, когда не сработал ни один из других операторов case. Например:
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
switch ($i) {
|
||||
case 0:
|
||||
echo "i равно 0";
|
||||
break;
|
||||
case 1:
|
||||
echo "i равно 1";
|
||||
break;
|
||||
case 2:
|
||||
echo "i равно 2";
|
||||
break;
|
||||
default:
|
||||
echo "i не равно 0, 1 или 2";
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>
|
||||
Выражением в операторе <literal>case</literal> может быть любое выражение,
|
||||
которое приводится в простой тип, то есть в тип integer, или в тип с плавающей точкой (float),
|
||||
или строку. Массивы или объекты не могут быть здесь использованы до тех пор, пока
|
||||
они не будут разыменованы до простого типа.
|
||||
</para>
|
||||
<para>
|
||||
Возможен альтернативный синтаксис для управляющей структуры switch.
|
||||
Для более детальной информации, см. <link
|
||||
linkend="control-structures.alternative-syntax">Альтернативный синтаксис для
|
||||
управляющих структур</link>.
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
switch ($i):
|
||||
case 0:
|
||||
echo "i равно 0";
|
||||
break;
|
||||
case 1:
|
||||
echo "i равно 1";
|
||||
break;
|
||||
case 2:
|
||||
echo "i равно 2";
|
||||
break;
|
||||
default:
|
||||
echo "i не равно to 0, 1 или 2";
|
||||
endswitch;
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>
|
||||
Возможно использование точки с запятой вместо двоеточия после оператора case. К примеру :
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
switch($beer)
|
||||
{
|
||||
case 'tuborg';
|
||||
case 'carlsberg';
|
||||
case 'heineken';
|
||||
echo 'Хороший выбор';
|
||||
break;
|
||||
default;
|
||||
echo 'Пожалуйста, сделайте новый выбор...';
|
||||
break;
|
||||
}
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</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
|
||||
-->
|
Reference in New Issue
Block a user