belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

4.7. Операторы break, continue и goto

Как было показано выше, иногда может возникать необходимость в досрочном прекращении цикла. Для этого случая в PHP предусмотрен специальный оператор break, который широко используется не только во всех перечисленных циклах, но и в условном операторе switch. Более того, данный оператор может принимать необязательный числовой аргумент, который указывает интерпретатору на количество вложенных структур, которые необходимо прервать (см рис. 4.14).

<?php
$k=0; 	//Задаем стартовое значение переменной

for($i=1; $i<=7; $i++){ //Внешний цикл
	while($k<9){			//Внутренний цикл
		$k+=1;				//Увеличиваем значение на единицу
		if($k==4){			//При достижении значения $k==4
			break 2;			//прерываются оба цикла сразу
		}
	}
}	
/* Благодаря прерыванию сразу обоих циклов внешний цикл 
прервется уже в ходе выполнения первой итерации */
echo $k; //Выведет 4
?>

Пример 4.14. Использование оператора break

Если бы в примере отсутствовал числовой аргумент 2 оператора break, то при достижении переменной $k значения 4 прервался бы только внутренний цикл. В результате внешний цикл смог бы продолжить свою работу, и в конечном итоге переменная $k достигла бы значения 9. Измените код примера и посмотрите, как изменится результат.

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

<?php
$k=0; 				//Задаем стартовое значение переменной

for($i=1; $i<=7; $i++){ //Внешний цикл
	while($k<9){			//Внутренний цикл
		$k+=1;				//Увеличиваем значение на единицу
		if($k==4){			//При достижении значения $k==4
			continue 2;		//прерываются текущие итерации обоих циклов сразу
		}
		echo $k; 	//Из-за continue не будет выведено значение $k==4
	}
	echo $i;   		//Из-за continue не будет выведено значение $i==1
}	
?>

Пример 4.15. Использование оператора continue

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

<?php
for($i=1; $i<=7; $i++){ 
	echo $i; 	 //Из-за goto эта инструкция выполнится только один раз,  
					 //после чего интерпретатор перейдет к метке var_1 
	
	goto var_1;  //Переходим к указанной метке, пропуская промежуточный код 
	++$i; 		 //Из-за goto эта инструкция не выполнится ни разу
}
var_1:	       //Задаем метку для перехода при помощи оператора goto
echo '<br>'.'Сюда я перехожу из цикла';   

goto var_2;     //Переходим к следующей метке, пропуская промежуточный код
echo 'Я выведен не буду'; 					 //Этот код будет пропущен

var_2:	   	 //Задаем еще одну метку для перехода при помощи оператора goto
echo '<br>'.'А вот меня покажут всем';  //Этот код будет выполнен
?>

Пример 4.16. Использование оператора goto

Целевая метка должна находиться в том же файле и в том же контексте, что и оператор goto, указывающий на нее. Это означает, что нельзя переходить изнутри функции (метода) наружу или совершать обратный переход. Также недопустим переход извне внутрь любой циклической структуры или оператора switch.

Таким образом, основным предназначением оператора goto следует считать использование его в циклических структурах вместо многоуровневых операторов break.

Контрольные вопросы и задания

  1. Опишите порядок использования операторов break, continue и goto.

Словарь новых английских слов

if [if] – если.
else [els] – иначе, еще.
switch [swɪtʃ] – переключение.       
case [keɪs] – блок, контейнер.
break [breɪk] – прерывать.
while [wʌɪl] – до тех пор пока.
do [duː] – делать.
for [fɔː] – для.
each [iːtʃ] – каждый.
continue [kənˈtɪnjuː] – продолжать.
default [dɪˈfɔːlt] – по умолчанию.
key [kiː] – ключ.
as [æz] – как.
value [ˈvaljuː] – значение.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх