Прекратить работу цикла 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 |