Операторы выбора/ if...else
К операторам выбора относят: условный оператор (if...else) и переключатель (switch). Синтаксис условного оператора:
if(condition) statement 1 else statement 2
Условие condition может быть любым выражением. Если оно истинно,
то выполняется оператор statement 1. В противном случае выполняется
оператор statement 2. Допустима сокращенная форма записи условного
оператора, в которой отсутствуют else и оператор statement 2.
В свою очередь, операторы statement 1 и statement 2 могут быть
условными, что позволяет организовывать цепочки проверок любой глубины
вложенности. И в этих цепочках каждый условный оператор может быть как
полным, так и сокращенным. В связи с этим возможны ошибки
неоднозначного сопоставления if и else.
Синтаксис языка предполагает, что при вложенных условных
операторах каждое else соответствует ближайшему if. В качестве такого
ошибочного примера можно привести следующую конструкцию [Подбельский
В.В. Язык С++. М.:Финансы и статистика, 2001]:
$x = 1;
$y = 1;
if($x == 1)
if($y == 1)echo("x=1 and y=1");
else echo("x!=1");
?>
При х равном 1 и у равном 1 совершенно справедливо печатается
фраза «х = 1 and у = 1». Однако фраза «х != 1» может быть напечатана
при х равном 1 и при у не равном 1, так как else соответствует
ближайшему if. Внешний условный оператор, где проверяется $x == 1,
является сокращенным и в качестве statement 1 включает полный условный
оператор, где проверяется условие $у == 1. Т.е. проверка этого условия
выполняется только при х равном 1. Простым правильным решением этой
задачи является применение фигурных скобок, т.е. построение составного
оператора, т.е. нам нужно фигурными скобками ограничить область
действия внутреннего условного оператора, сделав его неполным. Тем
самым внешний оператор превращается в полный условный:
$x = 1;
$y = 1;
if($x==1)
{
if($y==1)echo("x=1 and y=1");
}
else echo("x!=1");
?>
Заметим, что проверка дополнительных условий возможна при помощи
оператора elseif. Оператор if может включать сколько угодно блоков
elseif, но else в каждом if может быть только один. Как правило, в
конструкциях if…elseif…else оператор else определяет, что нужно делать,
если никакие другие условия не являются true. Однако, вообще говоря,
использование оператора elseif довольно сильно ухудшает читабельность
кода, и лучше в этом случае пользоваться переключателем (switch).
Операторы выбора/ Переключатель switch
Переключатель switch является наиболее удобным средством для организации мультиветвления. Синтаксис переключателя таков:
switch(expression) // переключающее выражение
{
case value1: // константное выражение 1
statements; // блок операторов
break;
case value2: // константное выражение 2
statements;
break;
default:
statements;
}
Управляющая структура switch передает управление тому из
помеченных case операторов, для которого значение константного
выражения совпадает со значением переключающего выражения. Если
значение переключающего выражения не совпадает ни с одним из
константных выражений, то выполняется переход к оператору, помеченному
меткой default. В каждом переключателе может быть не более одной метки
default, однако она может отсутствовать вообще. Приведем пример
программы с переключателем. В этой программе выводятся названия
нечетных целых десятичных цифр от 1 до 9 не меньше заданной, в
зависимости от числа, указанного в форме test.html. Форма test.html не
отличается от той, что мы уже использовали:
<form action = "http://localhost/PHP/chapt2/switch.php" method="get">
number: <input type="text" name="number"/><br>
<input type="submit"/>
</form>
switch($number)
{
case 1:
echo ("one ");
case 2: case 3:
echo ("free");
case 4: case 5:
echo ("five");
case 6: case 7:
echo ("seven");
case 8: case 9:
echo ("nine");
break;
default:
echo ("This isn't number or number is > 9 or < 1");
}
?>
Так же, как и в случае условного оператора для переключателей
допустимы любые степени вложенности, однако злоупотреблять этим без
особой на то необходимости также не следует.
Кроме уже сказанного о переключателе, приведенная программа
демонстрирует действие оператора break, с помощью которого происходит
выход из переключателя. Если поместить операторы break после вывода
каждой из цифр, то в окне браузера мы увидим название только одной
нечетной цифры.
Как видим, после конструкции switch приведен составной оператор,
однако это совершенно не обязательно – после switch может находиться
любой оператор, помеченный служебным словом case. Напомним, что составной оператор, это заключенная в фигурные скобки последовательность операторов.
Заметим также, что в PHP в качестве меток case могут
использоваться не только литералы, но и сами метки могут быть
переменными. В качестве меток case в PHP не могут выступать только
массивы и объекты.
|