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 'После метки'; ?>

С этой темой смотрят:

puzzleweb.ru

Циклы в PHP

Циклы

Последнее обновление: 1.11.2015

Для совершения повторяемых действий в PHP, как и в других языках программирования, используются циклы. В PHP имеются следующие виды циклов:

Цикл for

Цикл for имеет следующее формальное определение:


for ([инициализация счетчика]; [условие]; [изменение счетчика])
{
    // действия
}

Рассмотрим стандартный цикл for:


<?php
for ($i = 1; $i < 10; $i++)
{
    echo "Квадрат числа $i равен " . $i * $i . "<br/>";
}
?>

Первая часть объявления цикла — $i = 1 — создает и инициализирует счетчик — переменную $i. И перед выполнением цикла его значение будет
равно 1. По сути это то же самое, что и объявление переменной.

Вторая часть — условие, при котором будет выполняться цикл. В данном случае цикл будет выполняться, пока $i не достигнет 10.

Третья часть — приращение счетчика на единицу. Опять же нам необязательно увеличивать на единицу. Можно уменьшать: $i—.

В итоге блок цикла сработает 9 раз, пока значение $i не станет равным 10. И каждый раз это значение будет увеличиваться на 1. Каждое отдельное повторение цикла называется итерацией.
Таким образом, в данном случае произойдет 9 итераций.

Цикл while

Цикл while проверяет истинность некоторого условия, и если условие истинно, то выполняются блок выражений цикла:


<?php
$counter = 1;
while($counter<10)
{
	echo $counter * $counter . "<br />";
	$counter++;
}
?>

Если в блоке while всего одна инструкция, то фигурные скобки блока можно опустить:


<?php
$counter = 0;
while(++$counter<10)
	echo $counter * $counter . "<br />";
?>

Цикл do..while

Цикл do..while похож на цикл while, только теперь выполняется блок цикла, и только потом выполняется проверка условия. То есть
даже если условие ложно, то блок цикла выполнится как минимум один раз:


<?php
$counter = 1;
do
{
	echo $counter * $counter . "<br />";
	$counter++;
}
while($counter<10)
?>

Операторы continue и break

Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться оператором break:


<?php
for ($i = 1; $i < 10; $i++)
{
	$result = $i * $i;
	if($result>80)
	{
		break;
	}
    echo "Квадрат числа $i равен $result <br/>";
}
?>

И если вдруг результат операции окажется больше 80, то происходит выход из цикла.

Для управления циклами также применяется оператор continue. Он осуществляет переход к следующей итерации цикла:


<?php
for ($i = 1; $i < 10; $i++)
{
	if($i==5)
	{
		continue;
	}
    echo "Квадрат числа $i равен " . $i * $i . "<br/>";
}
?>

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

metanit.com

Циклы (Основы PHP — Урок из курса)

Циклы позволяют многократно выполнять блок кода. Это необходимо для решения
множества задач. Например, перебор записей, полученных из базы данных, построчное чтение файла или обход элементов массива. В РНР есть четыре типа циклов: while , do..while , for и foreach . Первые три описываются далее, а foreach — при обсуждении массивов далее…

Конструкция while представляет собой простейший оператор цикла. Блок операторов выполняется, пока верно условие.

while (Условие)
{
   Операторы
}

Рассмотрим работу цикла подробнее:

  1. Проверка условия.
  2. Если оно истинно, выполнение операторов; если ложно — выход из цикла.
  3. Переход к шагу 1.

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

Рассмотрим простой пример вывода чисел от 1 до N:

<?php
$n = 10;
$i = 1;
while ($i <= $n)
{
   echo "$i<br/>";
   $i++;
}
?>

Иногда управляющая переменная цикла бывает булевой. Например, при чтении
в цикле строк файла можно использовать переменную булева типа, определяющую
конец файла.

Циклы do..while аналогичны циклам while, за исключением того, что условие проверяется не в начале, а в конце каждой итерации. Это означает, что цикл будет выполнен, по крайней мере, один раз.

do {
   Операторы
} while (Условие)

Рассмотрим работу цикла:

  1. Выполнение блока операторов.
  2. Проверка условия.
  3. Если оно истинно, переход к шагу 1; если ложно — выход из цикла.

В примере ниже единица будет выведена, даже если N = 0:

<?php
$n = 10;
$i = 1;
do
{
   echo "$i<br/>";
   i++;
} while ($i <= $n)
?>

Цикл do..while используют достаточно редко ввиду его громоздкости и плохой читаемости. Лучше слегка изменить алгоритм (от чего он, скорее всего, выиграет) и
применить for или while.

Цикл for — шедевр лаконичной организации кода, пришедший из языка Си. Конструкция позволяет одной строкой полностью определить поведение цикла:

for (Выражение1; Выражение2; Выражение3)
{
   Операторы
}


Выражение1
вычисляется перед началом цикла. Обычно в нем инициализируется
управляющая переменная. Выражение2 вычисляется в начале каждой итерации цикла. Это выражение ведет так же, как условие цикла while, если значением Выражения2 оказывается true, цикл продолжается, иначе — останавливается. Выражение3
вычисляется в конце каждой итерации и, как правило, используется для изменения
значения управляющей переменной цикла.

Ход выполнения цикла:

  1. Выполнение Выражения1 .
  2. Проверка Выражения2 .
  3. Если оно истинно, переход к шагу 4; если ложно — выход из цикла.
  4. Выполнение блока операторов.
  5. Выполнение Выражения3 .
  6. Переход к шагу 2.

Рассмотрим тот же пример вывода чисел от 1 до N:

<?php
$n = 10;
for ($i = 1; $i <= $n; $i++)
{
   echo "$i<br/>";
}
?>

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

Так же, как в Си и других языках, допускается не указывать одно или более выражений (если не указано Выражение2, считается, что оно true). Цикл while всегда
можно заменить циклом for.

Следующие две конструкции эквивалентны:


Вариант 1
:

while (Условие)
{
   Операторы
}


Вариант 2
:

for ( ; Условие; )
{
   Операторы
}

Бесконечным называется цикл такого вида:

while (true)
{
   ...
}
//Или такого, что одно и то же:
for (;;)
{
   ...
}

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

<?php
$n = 10;
$i = 1;
while (true)
{
   echo "$i<br/>";
   $i++;

   if ($i > $n)
      break;
}
?>

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

<?php
$n = 10;

for ($i = 1; $i <= $n; $i++)
{
   if ($i % 2 == 0)
      continue;

   echo "$i<br/>";
}
?>

Остаток от деления на два четного числа равен нулю, такие числа мы пропускаем
в приведенном примере. Правильнее считается не использовать операторы прерывания цикла, а возлагать логику управления на условие. Старайтесь организовывать
циклы именно так.

codrob.ru

Досрочный выход, остановка цикла в PHP

Досрочно закончить исполнение цикла в PHP можно разными способами. Хотя конструкций циклов в PHP много, но принципы одинаковые. Для примера будем использовать цикл for.


<?php
for ($k=0; $k < 10; $k++) {
    echo «$k/»;
    if ($k == 5) break;
}
//увидим : 0/1/2/3/4/5/
?>



<?php

for ($k=0; $k < 10; $k++) {

    echo «$k/»;

    if ($k == 5) break;

}

//увидим : 0/1/2/3/4/5/

?>


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


<?php
for ($j=0; $j < 3; $j++)
    for ($k=0; $k < 10; $k++) {
        echo «$j-$k/»;
        if ($k == 5) break 2;
    }
//увидим : 0-0/0-1/0-2/0-3/0-4/0-5/
?>



<?php

for ($j=0; $j < 3; $j++)

    for ($k=0; $k < 10; $k++) {

        echo «$j-$k/»;

        if ($k == 5) break 2;

    }

//увидим : 0-0/0-1/0-2/0-3/0-4/0-5/

?>


Прерывание цикла с помощью оператора goto

В php с 5й версии появляется оператор goto. Природа оператора goto естественна сама по себе, так как это один из базовых операторов на языке ассемблера, но некоторые специалисты и «философы от программирования» заявляют о недопустимости использования оператора прямого безусловного перехода в процедурных языках, т.к. это «расхолаживает» программиста. Но что нам до философии?

Изменим код предыдущего примера, используя goto:


<?php
for ($j=0; $j < 3; $j++)
    for ($k=0; $k < 10; $k++) {
        echo «$j-$k/»;
        if ($k == 5) goto exit_circle_point;
    }
exit_circle_point:
//увидим : 0-0/0-1/0-2/0-3/0-4/0-5/
?>



<?php

for ($j=0; $j < 3; $j++)

    for ($k=0; $k < 10; $k++) {

        echo «$j-$k/»;

        if ($k == 5) goto exit_circle_point;

    }

exit_circle_point:

//увидим : 0-0/0-1/0-2/0-3/0-4/0-5/

?>


Результат будет аналогичен.

Goto имеет ряд ограничений по применению, с ними лучше всего ознакомиться в мануале по PHP.

Написать комментарий


Данная запись опубликована в 11.11.2015 16:17 и размещена в PHP.
Вы можете перейти в конец страницы и оставить ваш комментарий.

Мало букафф? Читайте есчо !

Валидатор для JSON строки в PHP

Октябрь 2, 2018 г.

К JSON можно относиться как к одной из разновидностей текстовых форматов передачи данных. Но для PHP это просто ещё одна скалярная строка. Как определить, что перед нами действительно JSON?



Чтобы убедиться, придется попытаться декодировать строку. …

Читать

shra.ru