Материал предоставлен https://it.rfei.ru

Прекращение работы цикла

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

Один из таких случаев может произойти, когда при записи файла возникнет ошибка, возможно, из-за нехватки места на диске (см. пример).

Пример. Запись файла, использующая цикл for с перехватом ошибки

<?php
$fp = fopen("text.txt", 'wb');

for ($j = 0 ; $j < 100 ; ++$j)
{
	$written = fwrite($fp, "data");
	if ($written == FALSE) break;
}

fclose($fp);
?>

Это наиболее сложный из всех ранее приведенных фрагментов кода, но вы уже готовы к его пониманию. Команды обработки файлов будут рассмотрены в одной из следующих глав, а сейчас нужно лишь знать, что в первой строке кода открывается файл text.txt для записи в двоичном режиме, а затем переменной $fp возвращается указатель на него, который в дальнейшем используется для ссылки на этот открытый файл.

Затем осуществляется 100 проходов цикла (от 0 до 99), записывающих строку data в файл. После каждой записи функция fwrite присваивает переменной $written значение, представляющее собой количество успешно записанных символов. Но если происходит ошибка, функция fwrite присваивает этой переменной значение FALSE.

Поведение функции fwrite облегчает коду проверку переменной $written на наличие значения FALSE, и если она имеет такое значение, он прекращает работу цикла и передает управление инструкции, закрывающей файл.

При желании улучшить код строку

if ($written == FALSE) break;

можно упростить за счет использования оператора NOT:

if (!$written) break;

Фактически пара инструкций, находящихся внутри цикла, может быть сокращена до одной:

if (!fwrite($fp, "data")) break;

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

break 2;

Циклы forИнструкция continue