- switch, break, continue
Печать: Шрифт: Абв Абв Абв
danilov 26 Февраля 2006 в 22:30:59
switch

Принцип работы конструкции switch отчасти напоминает if — результат, полученный при вычислении выражения, проверяется по списку потенциальных совпадений.

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

<?
switch (выражение) {
case (
условие):
блок
case (условие):
блок
...
default:
блок
}
?>

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

Как будет показано в следующих главах, одной из сильнейших сторон РНР является обработка пользовательского ввода. Допустим, программа отображает раскрывающийся список с несколькими вариантами и каждая строка списка соответствует некоторой команде, выполняемой в отдельной конструкции case. Реализацию очень удобно построить на использовании команды switch:

<?
$user_input
= "recipes"; // Команда,выбранная пользователем
switch ($user_input) :
case(
"search") :
print
"Let's perform a search!";
break;
case(
"dictionary") :
print
"What word would you like to look up?";
break;
case(
"recipes") :
print
"Here is a list of recipes...";
break;
default :
print
"Here is the menu...";
break;
endswitch;
?>


Как видно из приведенного фрагмента, команда switch обеспечивает четкую и наглядную организацию кода. Переменная, указанная в условии switch (в данном примере — $user_input), сравнивается с условиями всех последующих секций case. Если значение, указанное в секции case, совпадает Со значением сравниваемой переменной, выполняется блок этой секции. Команда break предотвращает проверку дальнейших секций case и завершает выполнение конструкции switch. Если ни одно из проверенных условий не выполняется, активизируется необязательная секция default. Если секция default отсутствует и ни одно из условий не выполняется, команда switch просто завершается и выполнение программы продолжается со следующей команды.

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

пока не встретится команда break или не будет достигнут конец конструкции switch. Следующий пример демонстрирует последствия отсутствия забытой команды break: $value = 0.4;
<?
switch($value) :
case (
0.4) :
print
"value is 0.4<br>";
case (
0.6) :
print
"value is 0.6<br>";
break;
case (
0.3) :
print
"value is 0.3<br>";
break;
default :
print
"You didn't choose a value!";
break;
endswitch;
?>
Результат выглядит так:

Quote:
value is 0.4
value is 0.6


Отсутствие команды break привело к тому, что была выполнена не только команда print в той секции, где было найдено совпадение, но и команда print в следующей секции. Затем выполнение команд конструкции switch прервалось из-за команды switch, следующей за второй командой print.

Выбор между командами switch и if практически не влияет на быстродействие про-граммы. Решение об использовании той или иной конструкции является скорее личным делом программиста.

break

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

<? break n; ?>


Необязательный параметр n определяет количество уровней управляющих конструкций, завершаемых командой break. Например, если команда break вложена в две команды while и после break стоит цифра 2, происходит немедленный выход из обоих циклов. По умолчанию значение n равно 1; выход на один уровень может обозначаться как явным указанием 1, так и указанием команды break без параметра. Обратите внимание: команда i f не относится к числу управляющих конструкций, прерываемых командой break. Об этом следует помнить при использовании необязательного параметра п.

Рассмотрим пример использования команды break в цикле foreach:

<?
$arr
= array(14, 12, 128, 34, 5);
$magic number = 128:
foreach (
$arr as $val) :
if (
Sval == $magic_number) :
print
"The magic number is in the array!";
break;
endif;
print
"val is Sval <br>";
endforeach;
?>


Если значение $magic_number присутствует в массиве $аrr (как в приведенном примере), поиск прерывается. Результат выглядит так:

Quote:
val is 14
val is 12
The magic number is in the array!


Приведенный пример всего лишь демонстрирует использование команды break. В РНР существует стандартная функция in_array( ), предназначенная для поиска заранее заданной величины в массиве;

continue

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

continue n;

Необязательный параметр n указывает, на сколько уровней внешних циклов распространяется действие continue.

Рассмотрим пример использования команды continue. Допустим, вы хотите сосчитать простые числа в интервале от 0 до некоторой заданной границы. Простоты ради предположим, что у нас имеется функция is_prime(), которая проверяет, является число простым или нет:

<?
$boundary
= 558;
for (
$i = 0; $i <= $boundary: $i++) :
if (!
is_prime($i)) :
continue;
endif;
$prime_counter++;
endfor;
?>


Если проверяемое число является простым, блок команды if обходится и переменная $prime_counter увеличивается. В противном случае выполняется команда continue, в результате чего происходит немедленный переход в начало следующей итерации.

Использование continue в длинных и сложных алгоритмах приводит к появлению запу- танного и невразумительного кода. В подобных случаях использовать continue не рекомендуется.

Команда continue не является безусловно необходимой в программах, поскольку аналогичного эффекта можно добиться при помощи команды if.
Добавить сообщение
Чтобы добавлять комментарии зарeгиcтрирyйтeсь