Поиск

Условная конструкция switch

Если вы обнаружили, что ваши условные выражения ifelseifelse становят ся все более сложными, самое время познакомиться с оператором switch. Он поможет сэкономить массу времени и упростить программирование. Конструк ция switch проверяет на совпадение значение переменной с некоторыми об разцами строк. При совпадении выполняются следующие операторы:

switch ($Variable) {
case "valuel":
statement(s)1;
break;
case "valuel":
statement(s)2;
break;
default:
statement(s)3;
break;

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

Вышеприведенной конструкцией switch выполняются точно те же провер ки и операторы, что и аналогичной, но более громоздкой конструкцией:

' if ($Variable == "valuel") {
statement(s)1;
} elseif ($Variable == "value2") {
statement(s)2;
} else {
statement(s)3;
}

Еще раз поясню порядок выполнения сравнений и соответствующих опера торов в конструкции switch. Вопервых, сравнения производятся последова тельно: с самого первого и далее вниз. Вовторых, при первом же совпадении начинают выполняться указанные операторы вплоть до оператора break или до конца блока. Если совпадений не найдено, выполняются инструкции, иду щие за специальным оператором default:.

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

Использование конструкции switch

  1. Создайте новый HTMLдокумент в текстовом редакторе.
  2. Начните со стандартного HTMLзаголовка.
  3. <HTMLxHEADxTITLE>HTML Contact Form</TITLEx/HEADxBODY>
  4. Создайте форму, которая предоставляет пользователю возможность вы брать вариант связи с ним.
  5. <FORM ACT10N="HandleContact.php" METHOD=POST>
    First Name <INPUT TYPE=TEXT NAME="FirstName" SIZE=20xBR>
    Last Name <INPUT TYPE=TEXT NAME="LastName" SIZE=20xBR>
    How would you prefer to be contacted: <SELECT NAME="ContactHow">
    <OPTION VALUE="">Select One:</OPTION>
    <OPTION VALUE="Telephone">Telephone</OPTION>
    <OPTION VALUE="Mail">Mail</OPTION>
    <OPTION VALUE="EMail">EMail</OPTION>
    <OPTION VALUE="Fax">Fax</OPTION>
    </SELECTxBR>

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

  6. Создайте в форме окно для комментариев, затем закройте форму и HTML документ.
  7. Comments <TEXTAREA NAME= "Comments" ROWS = 5 COLS=40x/TEXTAREAxBR>
    <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    </FORMx/BODYx/HTML>
  8. Сохраните форму как contact.html (листинг 6.7) и загрузите ее на сервер. Листинг 6.7 т В этой HTMLформе для предоставления пользователю спис ка опций используется ниспадающее меню.
  9. 1 <HTML>
    2 <HEAD>
    3 <TITLE>HTML Contact Form</TITLE>
    4 </HEAD>
    5 <BODY>
    6 <FORM ACTION="HandleContact.php" METHOD=POST>
    7 First Name <INPUT TYPETEXT NAME="FirstName" SIZE=20xBR>
    8 Last Name <INPUT TYPE=TEXT NAME="LastName" SIZE=20xBR>
    9 How would you prefer to be contacted: <SELECT NAME="ContactHow">
    10 <OPTION VALUE="">Select One:</OPTION>
    11 <OPTION VALUE="Telephone">Telephone</OPTION>
    12 <OPTION VALUE»"Mail">Mail</OPTION>
    13 <OPTION VAI,DE="EMail">EMall</OPTION>
    14 <OPTION VALUE*"Fax">Fax</OPTION>
    15 </SELECTxBR>
    16 Comments <TEXTAREA NAME= "Comments" ROWS=5 COLS=40x/TEXTAREAxBR>
    17 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    18 </FORM>
    19 </BODY>
    20 </HTML>
  10. Теперь необходимо создать страницу, которая начнет обрабатывать ввод пользователя со страницы contact.html.
  11. Создайте новый PHPдокумент в текстовом редакторе.
  12. Начните со стандартного HTMLзаголовка.
  13. <HTMLxHEADxTITLE>Contact Information Request</TITLEx/HEADxBODY>
  14. Создайте HTMLформу и откройте раздел РНР.
  15. <FORM ACTION="HandleContact2.php" METHOD=POSTx?php

    Чтобы получить больше информации от пользователя, мы обратимся к дру гой форме.

  16. Сохраните полученные из сценария contact.html значения в невидимых элементах формы.
  17. print '("<INPUT TYPE=HIDDEN NAME=\"FirstName\"
    VALUE=\"$FirstName\">\n");
    print ("<INPUT TYPE=HIDDEN NAME=\ "LastNameV
    VALUE=\"$LastName\">\n");
    print ("<INPUT TYPE=HIDDEN NAME= \," Comments \ "
    VALUE=\"$Comments\">\n");
    v print ("<INPUT TYPE=HIDDEN NAME=\"ContactHow\"
    VALUE=\"$ContactHow\">\n");

    В главе З упоминалось, что можно передавать разнообразную информацию с помощью поля ввода с типом HIDDEN (скрытый). Здесь все данные, собран ные из сценария contact.html, помещаются в скрытые элементы, чтобы быть переданными на следующую страницу HandleContact2.php.

  18. Создайте конструкцию switch, которая в зависимости от сделанного пользователем выбора в contact.html функционирует поразному.
  19. switch (SContactHow) {
    case "Telephone":
    print("<B>Please enter a daytime phone number where you can be
    —reached:</BxBR>\n");
    print ("<INPUT TYPE=TEXT NAME=\"TelephoneV SIZE=10xBR>") ;
    print ("xINPUT TYPE=SUBMIT'NAME=SUBMIT VALUE=\"Continue\">\n");
    break;
    case "Mail":
    print ("<B>Please enter your complete mailing address:
    </BxBR>\n") ;
    print ("<TEXTAREA NAME=\"MailAddressX" ROWS=5 COLS=40>
    <TEXTAREAxBR>\n"} ;
    print ("<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Continue\">\n");
    break;
    case "EMail":
    print("<B>Please enter your EMail address:</BxBR>\n");
    print ("<INPUT TYPE=TEXT NAME=\"EMail\" SIZE=40xBR>\n") ;
    print ("<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Continue\">\n");
    break;
    case "Fax":
    print("<B>Please enter your Fax number:</BxBR>\n");
    print ("<INPUT TYPE=TEXT NAME=\"Fax\" SIZE=10xBR>\n");
    print ("<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Continue\">\n");
    break;
    default:
    print("<B>Please go back and select how you would prefer to be
    contacted4.</BxBR>\n") ;
    break;

    Конструкция switch создана для вывода на дисплей текста, зависящего от значения переменной $ContactHow. Если пользователь хочет, чтобы с ним свя зались по телефону или по электронной почте, будет запрошен номер телефо на или email соответственно. Если переменная $ContactHow не имеет значе ния, то будет инициирован вариант по умолчанию и пользователь получит сообщение с просьбой вернуться на страницу contact.html и выбрать вариант контакта с ним.

  20. Закройте раздел РНР, затем форму и HTMLстраницу.
  21. ?></FORMx/BODYx/HTML>
  22. Сохраните сценарий как HandleContact.php (листинг 6.8), загрузите его на сервер в один каталог с contact.html и протестируйте обе страницы в браузере (рис.).

Листинг 6.8 т Конструкцией switch в этом сценарии используется значение переменной SContactHow. Таким образом определяется, какую информацию запросить у пользователя: номер телефона, факса, адрес электронной почты или почтовый адрес. Типы скрытого ввода используются также для передачи других существующих значений.

1 <HTML>
2 <HEAD>
3 <TITLE>Contact Information Request</TITLEx/HEAD>
4 <BODY>
5 <FORM ACTION="HandleContact2.php" METHOD=POST>
6 <?php
7 // Передача принятого значения с помощью поля INPUT типа HIDDEN.
8 print ("<INPUT TYPE=HIDDEN •NAME=\"FirstName\n ,
VALUE=\"$FirstName\">\n");
9 print ("<INPUT TYPE=HIDDEN NAME=\"LastName\" •
VALUE=\"$LastNaroe\">\n");
10 print ("<INPUT TYPE=HIDDEN NAME=\"Corranents\" VALUE=\"$Comments\">\n");
11 print ("<INPUT TYPE=HIDDEN NAME=\"ContactHowV"
VALUE=\"$ContactHow\">\n");
12
13 switch ($ContactHow) {
14 case "Telephone":
15 print("<В>Р1еаве enter a daytime phone number where you can be
reached: </BxBR>\n");
16 print ("<INPUT TYPETEXT NAME=\"Telephone\" SXZE=10xBR>v");
17 print ("<INPUT TYPE=SUBM1T NAME=SUBMIT VALUE=\"Continue\">\n");
18 break;
19 caae "Mail":
20 print ("<B>Please enter your complete mailing address:</>
<BR>\n");
21 print ('4TEXTAREA NAME*\"MailAddress\" ROWS=5 COLS=40>
<TEXTAREAxBR>\n");
22 print ("<IKPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Continue\">\n");
23 break;
24 case "EMail":
25 print("<B>Please enter your EMail address:</BxBR>\n");
26 print ("<INPOT TYPE=TEXT NAME=\"EMail\" SIZE=40xBR>\n");
27 print ("<INPXJT TYPE»SUBMIT MAME=SUBMIT VALUE=\"Continue\">\n");
vvv
28 break;
29 case "Fax":
30 print("<B>Pleaae enter your Fax number:</BxBR>\n");
31 print ("<INPUT TYPE=TEXT NAME=\"Fax\" SIZE=10xBR>\n");
32 print ("<INPDT TYPE=SUBMIT ЫАМЕ=ЗиВМ1Т VALOE=\"Continue\">\n");
33 break;
34 default:
35 print("<B>Pleaae go back and select how you would prefer to be
contacted! </BxBR>\n") ;
36 break;
37 }
38 ?>
39 </FORM>
40 </BODY>
41 </HTML>


Мы еще не создали страницу HandleContact2.php, которая обрабатывала бы ре зультаты сценария HandleContact.php (как было упомянуто, мы собирались разра ботать только два этапа данного процесса). Если вы хотите, чтобы страница HandleContact.php функционировала как следует, напишите простой РНРсцена рий, который будет печатать все полученные значения.
В конструкциях switch вариант по умолчанию можно не использовать (допусти мо задать условие так, что ничего не произойдет, если ни один вариант не совпал с заданным значением). С другой стороны, если вы установили некий вариант по умолчанию, то он должен быть последним.
Если в конструкциях switch используются строки, помните, что они чувствитель ны к регистру и значение Value не будет соответствовать значению value.