Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

13.11. Конструкция switch в PHP

Оператор switch позволяет задавать несколько вариантов действий практически так же, как и оператор elseif. На самом деле, используя elseif, можно написать эквивалент любого оператора switch, но иногда switch гораздо понятнее. Допустим, у вас есть следующий участок в программе:

if ($i == 0) {

    print "i равно 0";

}

else

    if ($i == 1) {

        print "i равно

    }

    else

        if ($i == 2) {

            print "i равно

        }

        else

            print "ни одно условие не выполнилось";

Сэкономить время выполнения данной части, а также представить ее более логичным способом и поможет этот оператор.

Следующий пример совершает действия, аналогичные предыдущему, но в более красивой форме:

switch ($i) {

case 0: print "i равно 0"; break;

case 1: print "i равно 1"; break;

case 2: print "i равно 2"; break;

default: // необязателен

print " ни одно условие не выполнилось";

}

В таком представлении есть и еще одно преимущество. Если вы не поставите оператор break, например, перед case 1:, то в случае, когда переменная $i будет равна нулю, после вывода на экран сообщения об этом программа пойдет дальше и выведет также сообщение о том, что переменная $i равна еще и 1, и только после, встретив break;, продолжит свое выполнение за пределами switch.

Опишем принцип работы данного оператора. Значение выражения в скобках после оператора switch в первой строке сравнивается со всеми значениями case. Оператор case — это метки. Каждая метка case должна быть целочисленной константой или приводимой к ней. Дополнительное требование к меткам состоит втом, что значение каждой из них должно быть уникальным. Значение выражения в операторе switch поочередно сравниваются с каждым значением case. Когда метка, равная значению выражения, найдена, выполняются все операторы после нее и до ближайшего оператора break или до конца оператора switch. Если значение переменной будет соответствовать 1, то вызывается функция print "i равно 1";. Если бы после print "i равно 1"; не было оператора break, то была бы также вызвана функция print "i равно 2";, даже если значение переменной не было бы равно 2. Оператор break передает управление оператору, следующему за закрывающей скобкой оператора switch.

Иногда такое действие может оказаться полезным. Например, от пользователя требуется ввести a, b или c в нижнем регистре. Если регистр символа нам не важен, то надо разрешить ввод в любом регистре:

switch ($i) {

case 'А' :

case 'а' :

print "i равно А или а";

break;

case 'В' :

case 'b' :

print "i равно В или b";

break;

case 'C' :

case 'c' :

print "i равно С или с";

break;

default:

print "Сшибка ввода !";

}

Функция print "i равно А или а"; будет вызвана, когда переменная $i примет значение а или А. Метка default аналогична оператору else и так же, как и else, необязательна.

Изобразим структурограмму конструкции switch (рис. 13.2).

Рис. 13.2. Конструкция switch

Чтобы описать принцип работы данного скрипта, рассмотрим программу. Возьмем два файла: index.htm и test.php.

index.htm:

<html>

<head>

<title>Программа</title>

</head>

<body>

<form action="test.php" method="POST">

Введите ваше имя <input type="text" name="name"> <br>

<input type="submit">

</form>

</body>

</html>

Данный файл позволяет создать форму, через которую будем вводить значения нашей переменной. Далее эта форма вызывает выполнение программы, которая содержится в файле test.php:

<?

switch ($name) {

case 'Саша' :

print "Пользователь под именем $name уже зарегистрирован";

break;

case 'Таня' :

print "Пользователю под именем $name необходимо перерегистрироваться";

break;

case 'Игорь' :

print "Пользователь по имени $name удален из нашей базы за несоблюдение правил работы";

break;

default:

print "Пользователь по имени $name у нас не зарегистрирован, пройдите, пожалуйста, регистрацию";

}

?>

Принцип выполнения программы заключается в следующем. В зависимости от значения нашей переменной будет выполняться тот или иной блок. Этот пример показывает, как можно работать с оператором switch. После того как вы изучите основные функции, вы сможет применять их в этих блоках.

<< Предыдущий параграф Следующий параграф >>
Оглавление