Четверг, 16.05.2024, 08:14
DigitalBox
Приветствую Вас Гость | RSS
Главная Условные операторы Регистрация Вход
Меню сайта

Условные операторы



Условный оператор (conditional statement) выполняет фрагмент кода только при соблюдении определенного условия. Рассмотрим два наиболее полезных вида условных операторов:

  • Оператор if. Проверяет условие и, если оно истинно, выполняет соответствующий фрагмент кода.
  • Оператор switch. Проверяет набор альтернативных условий и, если одно из условий истинно, выполняет соответствующий фрагмент кода.

Использование оператора if

Оператор if предполагает проверку некоторого условия и, если оно истинно, выполнение соответствующего блока инструкций. Общий синтаксис оператора if имеет следующий вид:

if(условие)
{
     фрагмент кода
}
elseif(условие)
{
     фрагмент кода
}
else
{
     фрагмент кода
}

Оператор if состоит из следующих элементов:

  • if. Обязательная часть, проверяющая условие.
  • Если условие истинно, выполняется первый фрагмент кода. После выполнения операторов этого блока интерпретатор РНР переходит к обработке следующего за if оператора. Если условный оператор содержит также блок elseif или else, они пропускаются.
  • Если условие ложно, первый фрагмент кода не выполняется и интерпретатор РНР переходит к обработке следующей за этим фрагментом инструкции, которой может оказаться блок elseif, else или любой другой оператор, следующий за if.
  • elseif. Необязательный раздел оператора if. При желании можно использовать несколько разделов elseif. В этих разделах тоже проверяется истинность некоторого условия.
  • Если условие истинно, выполняется соответствующий фрагмент кода. После выполнения всех операторов этого фрагмента РНР переходит к обработке следующего за if оператора. Если условный оператор содержит несколько блоков elseif и else, они игнорируются.
  • Если условие ложно, соответствующий фрагмент кода не выполняется и РНР переходит к обработке следующего блока оператора if (т.е. блока elseif или else), а при его отсутствии — к следующему за if оператору.
  • else. Этот раздел тоже является необязательным. При этом в рамках одного оператора if блок else можно использовать только один раз. В блоке else условие не проверяется, а выполняется фрагмент кода, если все условия, содержащиеся в предыдущих блоках оператора if, ложны.

Рассмотрим пример использования оператора if. Представьте, что вы— учитель. Следующий оператор передает студенту оценку и небольшое текстовое сообщение, в зависимости от количества баллов, набранных при выполнении теста:

if ($score > 92)
{
     $grade = "А";
     $message = "Отлично";
}

elseif ($score <= 92 and $score > 83)
{
     $grade = "B";
     $message = "Хорошо";
}

elseif ($score <= 83 and $score > 74)
{

     $grade = "C";
     $message = "Удовлетворительно";
}

elseif ($score <= 74 and $score > 62)
{
     $grade = "D";
     $message = "Неудовлетворительно";
}

else
{
     $grade = "F";
     $message = "Хуже некуда!";
}

echo $message. "\n";
echo "Ваша оценка $grade\n";

Оператор if обрабатывается следующим образом:

  1. Значение переменной $score сравнивается с 92. Если оно больше этого числа, переменной $grade присваивается А, а переменней $message — значение Отлично, и интерпретатор РНР переходит к строкам, в которых информация выводится с использованием функции echo. Если $score меньше или равно 92, переменные $grade и $message не инициализируются и интерпретатор РНР переходит к инструкции elseif.
  2. Значение переменной $score сравнивается с числами 92 и 83. Если оно меньше или равно 92 и больше 83, выполняется инициализация переменных $grade и $message, и интерпретатор РНР переходит к строкам, в которых информация выводится с использованием функции echo. Если $score меньше или равно 83, переменные $grade и $message не инициализируются и интерпретатор РНР переходит ко второй инструкции elseif.
  3. Значение переменной $score сравнивается с 83 и 74. Если оно меньше или равно 83 и больше 74, выполняется инициализация переменных $grade и $message и интерпретатор РНР переходит к строкам, в которых информация выводится с использованием функции echo. Если $score меньше или равно 74, переменные $grade и $message не инициализируются и интерпретатор РНР переходит к следующей инструкции elseif.
  4. Значение переменной $score сравнивается с 74 и 62. Если оно меньше или равно 74 и больше 62, осуществляется инициализация переменных $grade и $message и интерпретатор РНР переходит к выводу данных с использованием функции echo. Если $score меньше или равно 62, переменные $gradeи $message не инициализируются и интерпретатор РНР переходит к инструкции else.
  5. Переменной $grade присваивается значение F, a $message — "Хуже некуда!", и интерпретатор РНР переходит к выводу информации с использованием функции echo.

Если фрагмент кода, выполняемый после проверки условия, состоит из одного выражения, фигурные скобки можно опустить. Допустим, в предыдущем примере инициализировалась только одна переменная $grade, т.е:

if($grade > 92)
{
     $grade = "А";
}

Теперь это выражение можно переписать следующим образом:

if ($grade > 92)
     $grade = "А";

Такая сокращенная запись позволяет избежать написания лишнего кода. Однако, если имеется несколько выражений, это может привести к путанице.


Отрицание в операторе if

Если необходимо, чтобы блок операторов выполнялся в случае невыполнения некоторого условия, перед этим условием следует поставить восклицательный знак (!). Рассмотрим для примера следующее выражение:

if (ereg("^C[а-я]*", $string))
{
     $list[] = $string. "\n";
}

Этот условный оператор проверяет, начинается ли строка $string с символа С. Другими словами, если строка $string соответствует шаблону, определяющему строки, которые начинаются с символа С, за которым следуют буквы нижнего регистра, — блок операторов выполняется. Если перед условием поставить восклицательный знак, ситуация кардинально изменится:

if(!ereg("^С[а-я]*", $string)
{
     $list[] = $string."\n";
}

В этом случае из-за наличия восклицательного знака (!) перед условным выражением массив $list будет содержать все строки, кроме тех, которые начинаются с символа С, т.е. условие истинно, если строка $string не начинается с символа С.


Вложенные операторы if

Условный оператор if можно использовать в другом условном операторе. Такое действие называется вложением (nesting). Пусть, например, необходимо связаться со всеми клиентами, которые живут в штате Айдахо (Idaho, ID). При этом клиентам, имеющим адрес электронной почты, нужно отправить электронное сообщение, а тем, кто его не имеет, — письмо по обычной почте. Это можно сделать с помощью вложенного оператора if:

if($custState == "ID")
{
     if($EmailAdd = "")
     {
          $contactMethod = "по обычной почте";
     }
     else
     {
          $contactMethod = "по электронной почте";
     }
}
else
{
     $contactMethod = "нет необходимости";
}

Первое условие позволяет узнать, проживает ли клиент в штате Айдахо. Если это так, сценарий РНР проверит наличие адреса электронной почты. Если у клиента его нет, переменной $contactMethod (которая определяет вид связи) присваивается значение по обычной почте, иначе — по электронной почте. Если же клиент проживает не в штате Айдахо, ему ничего не отправляется.


Оператор switch

Во многих ситуациях оператор if работает отлично. Однако иногда имеется список условий, для каждого из которых необходимо выполнить свой набор операторов. Например, нужно написать сценарий, который будет вычислять налог с оборота. Как в этом случае учесть разную налоговую ставку для различных штатов? Именно для таких ситуащй и предназначен оператор switch.

Оператор switch проверяет значение некоторой переменной, и если оно совпадает с имеющимся в перечне, выполняются соответствующие операторы. Общий синтаксис инструкции switch имеет следующий вид:

switch($имя_переменной)
{
     case значение:
          фрагмент кода;
          break;
     case значение:
          фрагмент кода;
          break;
     .....
     default:
          фрагмент кода;
          break;
}

При выполнении оператора switch интерпретатор PHP пытается найти строку case, содержащую значение, равное значению переменной $имя_переменной. Если такая строка обнаружена, выполняется соответствующий фрагмент кода до оператора break. Если же найти такую строку не удалось, выполняется фрагмент кода, следующий после ключевого слова default. В операторе switch можно задавать любое количество вариантов. При этом использование ключевого слова default не обязательно, но при его наличии строку default обычно ставят в конце оператора switch. Однако для интерпретатора РНР это не имеет значения.

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

switch ($custState)
{
     case "OR":
          $salestaxrate = 0;
          break;
     case "CA":
          $salestaxrate = 1.0;
          break;
     default:
          $salestaxrate = .5;
          break;
}
$salestax = $orderTotalCost*$salestaxrate;

В этом примере налог с оборота в штате Орегон равен 0%, в Калифорнии100%, а для всех остальных штатов — 50%. При выполнении оператора switch интерпретатор РНР пытается найти строку case, содержащую значение, равное значению переменной $custState. Если такая строка обнаружена, переменной $salestaxrate присваивается определенное значение. Например, если $custState равно ТХ(штат Техас), осуществляется переход к строке с ключевым словом default и переменной $salestaxrate присваивается значение .5. После выполнения оператора switch значение переменной $salestax будет равно половине (.5) от суммы заказа ($orderTotalCost).

Необходимо обратить внимание на операторы break, расположенные в конце каждого блока case. Если бы не они, интерпретатор РНР продолжал бы выполнять операторы либо до следующего оператора break, либо до конца инструкции switch. Это касается всех блоков case, кроме последнего.

Последний блок case оператора switch не требует оператора break. Однако его стоит использовать для большей ясности и согласованности кода.

Форма входа

Мини-чат

Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта
Скажи сайту спасибо
ЯндексЯндекс. ДеньгиХочу такую же кнопку



Получить WMR-бонус на свой кошелек!

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz