Страницы

суббота, 18 февраля 2012 г.

PHP. Оператор switch (case)



Как работает оператор switch и когда нам удобнее его использовать. Заменяем конструкцию if-else в простых ситуациях оператором switch.

Рассмотрим сегодня оператор switch, предназначенный для присваивания различного кода каждому из набора различных возможных случаев, которые может принимать управляющая переменная. То есть, у нас имеется одна переменная, и в зависимости от того, какое значение она принимает - выполняется соответствующий код, исходя из этого значения. Можно сказать, что этот оператор switch - это упрощенный способ использования конструкции if-else. Далее вы поймете почему. Пока, наверное, сложно, поэтому попробую объяснить на примере:
<?
$fut="chelsea";
switch ($fut) 
{
case "arsenal":
echo "Мы должны не проиграть";
break;

case "chelsea":
echo "Мы должны сыграть в ничью";
break;

case "bate":
echo "Мы должны выиграть";
break;

default:
echo "Нужной команды нету в списке, значит можно
играть, как нам хочется";
break;
}
?>
Давайте разбираться: вернемся к фантазии на тему футбола (ну люблю я этот футбол! :) ). Итак представим, что мы - тренер. Нам предстоит сыграть матч с какой-то одной командой, но мы пока не знаем, с какой. Наша переменная $fut="chelsea" содержит название этой команды, но представим, что мы пока не знаем, что в ней находится и какое значение она имеет. Но мы имеем такую информацию: команда, с которой мы будем играть, это - либо Арсенал, либо Челси, либо БАТЭ (я сугубо для примера, не поймите меня поклонником кого-либо или осуждающего). И тогда мы, имея долговременный и жизненый опыт понимаем, что команде нужно дать напутствия о том, как нужно играть с определенной командой. Мы начинаем говорить своей команде, что нужно делать при соответствующей игре с определнной команде, т.е. задаем установки футболистам (попробуем обработать их):
  • если мы играем с Арсеналом, то мы должны не проиграть;
  • если мы играем с Челси, то мы должны сыграть в ничью;
  • если мы играем с БАТЭ, то мы должны выиграть;
  • если же информатор обманул нас, и на матч с нами выйдет какая-то другая команда, установок для которой мы не имеем, то мы играем так, как нам захочется;
Как это реализовано на php: командой switch ($fut) мы определяем обработчику, что дальше пойдет набор вариантов кода, исполнение которого зависит от значения нашей переменной $fut, т.е. выполниться только та часть, которая равняется значению данной переменной, а все остальное проигнорируется. Внутри операции case " " мы помещаем значение, одно из возможных, которое может принять наша переменная, в нашем случае переменная $fut. Вот например, какой кусок кода отвечает за сравнение значения переменной $fut со значением "bate":
case "bate":
echo "Мы должны выиграть";
break;
То есть, если в нашей переменной было бы значение "bate", то исполнился бы код, находящийся после двоеточия:  echo "Мы должны выиграть"; И на экране мы бы увидел соответственно сообщение: Мы должны выиграть. Команда break; дает нам понять, что весь код, который мы хотели забить в случай с проверкой на равенство значений переменной $fut и значения "bate", закончился. То есть она определяет конец начинки для данного случая команды case. Можно для себя запомнить case как случай, тогда будет нагляднее представлять картину. Вернемся к нашему основному примеру - думаю вы уже догадались, что раз изначально переменная $fut содержит значение "chelsea", то соответственно на экране мы увидим следующее:
Мы должны сыграть в ничью
То есть для нашего варианта определился второй случай, где определилось равенство нашей переменной и значения команды case. А что же такое в конце - спросите вы. "default:" - это прописывается по желанию разработчиком, данная команда содержит в себе такой же принцип обработки, как и другие "case". Но начинка данного блока default будет выполняться лишь тогда, когда ни один из случаев case не будет равен значению нашей управляющей переменной (в нашем случае она же $fut). Исходя из начального примера, давайте изменим начальное значение переменной $fut:
<?
$fut="mu";
switch ($fut) {
...
default:
echo "Нужной команды нету в списке, значит можно
играть, как нам хочется";
break;
}
?>
И посмотрим, что получится в итоге на экране:
Нужной команды нету в списке, значит можно
играть, как нам хочется
Пару слов добавлю по поводу break - если не ставить данную команду после каждого случая, то для данного выбранного случая пойдет дальнейшая обработка кода и будет выполняться все, что стоит далее до тех пор, пока не встретится команда break.

Комментариев нет:

Отправить комментарий