PHP: break, continue и goto

break

Часто бывает удобно при возникновении некоторых условий иметь возможность досрочно завершить цикл. Такую возможность предоставляет оператор break. Он работает с такими конструкциями как: while, do while, for, foreach или switch.

Оператор break может принимать необязательный числовой аргумент, который сообщает ему, выполнение какого количества вложенных структур необходимо завершить. Значением числового аргумента по умолчанию является 1, при котором завершается выполнение текущего цикла. Если в цикле используется оператор switch, то break/break 1 выходит только из конструкции switch.

<?php

  $j = 0;
  
  while (++$j) {
    switch ($j) {
      case 5:
        echo "Итерация 5<br>\n";
        break 1;  /* Выход только из конструкции switch. */
      case 10:
        echo "Итерация 10; выходим<br>\n";
        break 2;  /* Выход из конструкции switch и из цикла while. */
    }
  }
  
  // другой пример  
  for ($bar1 = -4; $bar1 < 7; $bar1++) {
    // проверка деления на ноль
    if ($bar1 == 0) {
      echo 'Выполнение остановлено: деление на ноль невозможно.';
      break;
    }
    echo "50/$bar1 = ",50/$bar1,"<br>";
  }
  
?>

Разумеется, иногда вы предпочли бы просто пропустить одну из итераций цикла, а не завершать полностью работу цикла, в таком случае это делается с помощью оператора continue.

continue

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

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

<?php

  for ($bar1 = -4; $bar1 < 7; $bar1++) {
    // проверка деления на ноль
    if ($bar1 == 0) {
      echo "Итерация пропущена из-за попытки деления на ноль.
"; continue; } echo "50/$bar1 = ",50/$bar1,"<br>"; } ?>

Обратите внимание: в процессе работы цикла было пропущено нулевое значение переменной $counter, но цикл продолжил работу со следующего значения.

goto

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

Простой пример использования оператора goto:

<?php

  goto foo;       // указываем желаемую метку
  echo 'hello';
 
  foo:            // указываем место куда нужно перейти
  echo 'world';

?>

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

<?php

  for ($numb = 0; $numb < 100; $numb++) {
    if ($numb == 5) // если значение переменной $numb == 5
      goto end;     // переходим к выполнению инструкций следующих за меткой
	  
	echo "\$numb = $numb
"; } echo 'после цикла - до метки'; // инструкция не будет выполнена end: echo 'После метки'; ?>
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | Обратная связь