1 / 20

Управляющие конструкции в РНР

Управляющие конструкции в РНР. Управляющие конструкции.

enya
Download Presentation

Управляющие конструкции в РНР

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Управляющие конструкциив РНР

  2. Управляющие конструкции • Управляющие конструкции предоставляют в распоряжение программиста средства для построения сложных программ, способных проверять условия и реагировать на изменения значений входных данных во время работы, т.е. эти структуры управляют выполнением программы. • Управляющие конструкции обычно проверяют условия на истинность или ложность, и в зависимости от результата проверки выполняется то или иное действие. • Рассмотрим выражение $а == $b. Это выражение истинно, если $а равно $b, и ложно в противном случае. Результат истинного выражения считается равным 1, а результат ложного выражения равен 0. • Рассмотрим следующий фрагмент: $а = 5; $b = 5; print $а == $b; // В результате выводится значение 1. Если изменить $а или $b и присвоить переменной значение, отличное от 5, выводится 0.

  3. Команда if • Команда if представляет собой разновидность команды выбора, которая вычисляет значение выражения и в зависимости от того, будет ли полученный результат истинным или ложным, выполняет (или не выполняет) блок программного кода. • Существует две общих формы команды if: if (выражение) { if (выражение) { блок блок } } else { блок } • Проверка условий дает либо истинный, либо ложный результат. Выполнение блоков зависит от результата проверки, причем блок может состоять как из одной, так и из нескольких команд. • В следующем примере после проверки условия выбирается и выводится одно из двух утверждений: if ($cooking_weight < 200) { print "This is enough pasta (< 200g) for 1-2 people"; } else { print "That's a lot of pasta"; } • Если в результате проверки условия выполняется всего одна команда, фигурные скобки не обязательны. if ($cooking_weight < 100) print "Are you sure this is enough?";

  4. Команда elseif • Команда elseif добавляет в управляющую конструкцию if дополнительный уровень проверки и увеличивает количество условий, на основании которых принимается решение: if (выражение) { блок } elseif (выражение) { блок } • В РНР существует альтернативное представление команды elseif–в виде двух отдельных слов elseи if. Оба варианта приводят к одинаковым результатам, а альтернативное представление поддерживается исключительно для удобства. Команда elselfособенно полезна в тех случаях, когда происходит последовательное уточнение проверяемых условий. • Важно: условие elselfвычисляется лишь в том случае, если все предшествующие условия ifи elseifоказались ложными. if ($cooking_weight < 200) { print "This is enough pasta (< 200g) for 1-2 people"; } elseif ($cooking_weight < 500) { print "That's a lot of pasta"; } else { print "Ok! Very well"; }

  5. Вложенные команды if • Вложение команд if обеспечивает максимальный контроль над проверкой условий. • Например, вес продукта должен проверяться лишь в том случае, если речь идет о пасте (макаронных изделиях): // Проверить значение $pasta if ($food == "pasta") { // Проверить значение $cooking_weight if ($cooking_weight < 200) { print "This is enough pasta (< 200g) for 1-2 people"; } elseif ($cooking_weight < 500) { print "That's a lot of pasta"; } else { print "Ok! Very well"; } } • Как видно из приведенного кода, вложенные команды if позволяют лучше управлять логикой работы программы.

  6. Вычисление нескольких условий • При выборе логики работы программы в управляющей структуре можно проверять комбинацию сразу нескольких условий: if ($cooking_weight < 0) { print "Invalid cooking weight!"; } if ( ($cooking_weight > 0) && ($cooking_weight < 200) ) { print "This is enough pasta (< 200g) for 1-2 people"; } elseif ( ($cooking_weight > 200) && ($cooking_weight < 500) ) { print "That's a lot of pasta"; } else {    print "Ok! Very well"; } • Проверка сложных условий позволяет устанавливать интервальные ограничения, обеспечивающие более четкий контроль над логикой выполнения программы и уменьшающие количество лишних управляющих конструкций, в результате чего программа становится более понятной.

  7. Альтернативное ограничение блоков • В управляющих структурах используются специальные ограничители, определяющие границы блоков – фигурные скобки. • Для удобства программистов в РНР поддерживается альтернативный формат ограничения блоков с использованием двоеточия: if (выражение): блок else: блок endif; • Следовательно, две приведенных ниже команды if полностью эквивалентны: if ($а== $b) { print "Equivalent values!"; } if ($a ==$b): print "Equivalent values!"; endif;

  8. Конструкция while • Конструкция while предназначена для многократного (циклического) выполнения блока команд. Блок команды while выполняется до тех пор, пока условие цикла остается истинным. • Общая форма цикла while выглядит так: while (выражение) : блок endwhile; • Рассмотрим использование цикла while на примере вычисления факториала (n!), где n = 5: $n = 5; $nсору = $n; $factorial = 1; // Установить начальное значение факториала while ($n > 0) : $factorial = $n * $factorial; $n--; // Уменьшить $n на 1  endwhile; print "The factorial of $ncopy is $factorial."; // Программа выводит следующий результат: The factorial of 5 is 120. • В этом примере $n уменьшается в конце каждой итерации. Условие цикла не должно быть истинным в тот момент, когда переменная $n станет равна 0, поскольку величина $factorial умножится на 0, а этого быть не должно.

  9. Цикл do…while • Цикл do...while работает почти так же, как и цикл while, но условие проверяется не в начале, а в конце каждой итерации. • Цикл do…while всегда выполняется хотя бы один раз, а цикл while может вообще не выполняться, если перед входом в цикл условие окажется ложным. • Общая форма цикла do…while выглядит так : do { блок } while (выражение); • В цикле do…while не поддерживается альтернативный синтаксис (ограничение блоков при помощизавершающего ключевого слова и двоеточия), поэтому блок может заключаться только в фигурные скобки. • Пример вычисления факториала : $n = 5: $ncopy = $n; $factorial = 1; // Установить начальное значение факториала do { $factorial = $n * $factorial; $n--: // Уменьшить Sn на 1 } while (Sn > 0); print "The factorial of Sncopy is $factorial."; // Программа выводит следующий результат: The factorial of 5 is 120.

  10. Цикл for • Цикл for обеспечивает еще одну возможность многократного выполнения блоков. Он отличается от цикла while только тем, что условие изменяется в самой управляющей конструкции, а не где-то внутри блока команд. Как и в случае с циклом while, цикл выполняется до тех пор, пока проверяемое условие остается истинным. • Общая форма конструкции for выглядит так: for (инициализация; условие; приращение) { блок } • Инициализация выполняется всего один раз и определяет начальное значение управляющей переменной цикла. Условие проверяется в начале каждой итерации и определяет, должна ли выполняться текущая итерация или нет. Приращение определяет изменение управляющей переменной при каждой итерации (переменная может как увеличиваться, так и уменьшаться).

  11. Цикл for • Следующий пример демонстрирует простейший случай применения цикла for: for ($i = 10; $1 <- 100; $1 +=10): // Обратная косая черта предотвращает возможную интерполяцию переменной $1 print "\$i = $i <br>"; endfor;      // Выполнение этого фрагмента дает следующий результат: $i = 10 $i = 20 $i = 30 $i = 40 $i = 50 $i = 60 $i = 70 $i = 80 $i = 90 $i = 100 • В этом примере управляющая переменная $i инициализируется значением 10. Условие заключается в том, что цикл продолжается до тех пор, пока $i не достигнет или не превысит пороговую величину 100. Наконец, при каждой итерации значение $i увеличивается на 10. В результате команда print выполняется 10 раз, каждый раз выводя текущее значение $i. Обратите внимание: для увеличения $i на 10 используется оператор сложения с присваиванием. Для этого есть веские причины, поскольку циклы for в РНР не поддерживают более традиционной записи $i = $i + 10. • Данный пример можно записать и в другом виде, но с теми же результатами: for ($i = 10; $i <= 100; print "\$i - $i <br>"; $i+=10);

  12. Цикл for • У цикла for существует несколько специфических особенностей. • Например, можно инициализировать несколько переменных одновременно, разделяя команды инициализации запятыми: for ($x=0,$y=0: $x+$y<10; $x++) : $У += 2;                  // Увеличить $у на 2  print "\$y = $y <BR>";    // Вывести значение $у $sum = $x + $y; print "\sum = $sum<BR>";  // Вывести значение $sum endfor; // Результат: $y = 2  $sum = 2  Sy = 4  $sum = 5  $y = 6  $sum = 8  $y = 8  $sum = 11 • Этот пример выводит текущие значения $y и суммы $х и $у. Как видно из приведенных результатов, выводится значение $sum = 11, хотя эта сумма выходит за границы условия цикла ($х + $у < 10). Это происходит из-за того, что при входе в данную итерацию переменная $у была равна 6, а переменная $х была равна 2. Значения переменных соответствовали условию цикла, поэтому $х и $у были присвоены новые значения, в результате чего была выведена сумма. При очередной проверке условия сумма 11 превысила пороговое значение 10 и цикл завершился.

  13. Цикл for • В управляющих выражениях циклов for могут отсутствовать любые компоненты. Например, можно передать ранее инициализированную переменную прямо в цикл, не присваивая ей определенного начального значения. Возможны и другие ситуации – например, приращение переменной цикла может осуществляться в зависимости от некоторого условия, определяемого в цикле. В этом случае приращение не должно указываться в управляющем выражении. • Пример: $х = 5: for (: : $х +=2): print " $х "; if ($x == 15): break; // Выйти из цикла for endif; endfor; // Результат: 5 7 9 11 13 15 • Хотя циклические конструкции for и while выполняют практически одинаковые функции, считается, что цикл for делает программу более наглядной. Это объясняется тем, что программист при виде команды for немедленно получает всю необходимую информацию о механике и продолжительности цикла. С другой стороны, в командах while приходится тратить лишнее время на поиск обновлений управляющих переменных – в больших программах это может занимать немало времени.

  14. Конструкция foreach • Конструкция foreach представляет собой разновидность for, включенную в язык для упрощения перебора элементов массива. • Существуют две разновидности команды foreach, предназначенные для разных типов массивов: foreach (массив as $элемент) { foreach (массив as $ключ => $элемент) { блок блок } } • Например, при выполнении следующего фрагмента: $menu = аrrау("pasta", "steak", "potatoes", "fish", "fries"); foreach ($menu as $item) { print "$item <BR>"; } // Будет выведен следующий результат: pasta steak potatoes fish fries • В этом примере следует обратить внимание на два обстоятельства. Во-первых, конструкция foreach автоматически возвращается в начало массива (в других циклических конструкциях этого не происходит). Во-вторых, нет необходимости явно увеличивать счетчик или иным способом переходить к следующему элементу массива – это происходит автоматически при каждой итерации foreach.

  15. Конструкция foreach • Пример использования цикла foreach при работе с ассоциативными массивами: $inventory = array { "merlot" => 15, "zinfandel" => 17, "sauvignon" => 32 } foreach ($inventory as $i => $item_count) { print "$item_count bottles of $i remaining<BR>"; } // В этом случае результат выглядит так: 15 bottles of merlot remaining 17 bottles of zinfandel remaining 32 bottles of sauvignon remaining • Как видно из приведенных примеров, конструкция foreach заметно упрощает работу с разными массивами.

  16. Конструкция switch • Принцип работы конструкции switch отчасти напоминает if – результат, полученный при вычислении выражения, проверяется по списку потенциальных совпадений. • Это особенно удобно при проверке нескольких значений, поскольку применение switch делает программу более наглядной и компактной. • Общий формат команды switch: switch (выражение) { case (условие): блок case (условие): блок ... default: блок } • Проверяемое условие указывается в круглых скобках после ключевого слова switch. Результат его вычисления последовательно сравнивается с условиями в секциях case. При обнаружении совпадения выполняется блок соответствующей секции. Если совпадение не будет обнаружено, выполняется блок необязательной секции default.

  17. Конструкция switch • Например, программа отображает раскрывающийся список с несколькими вариантами и каждая строка списка соответствует некоторой команде, выполняемой в отдельной конструкции case: $user_input = "recipes"; // Команда, выбранная пользователем switch ($user_input): case("search"): print "Let's perform a search!"; break; case("dictionary"): print "What word would you like to look up?"; break; case("recipes"): print "Here is a list of recipes..."; break; default: print "Here is the menu..."; break; endswitch; • Переменная, указанная в условии switch($user_input), сравнивается с условиями всех последующих секций case. Если значение, указанное в секции case, совпадает со значением сравниваемой переменной, выполняется блок этой секции. Команда break предотвращает проверку дальнейших секций case и завершает выполнение конструкции switch. Если ни одно из проверенных условий не выполняется, активизируется необязательная секция default. Если секция default отсутствует и ни одно из условий не выполняется, команда switch просто завершается и выполнение программы продолжается со следующей команды. • При отсутствии в секции case команды break выполнение switch продолжается со следующей команды до тех пор, пока не встретится команда break или не будет достигнут конец конструкции switch.

  18. Конструкция switch • Следующий пример демонстрирует последствия отсутствия забытой команды break: $value = 0.4; switch($value): case (0.4): print "value is 0.4<br>"; case (0.6): print "value is 0.6<br>"; break; case (0.3): print "value is 0.3<br>"; break; default: print "You didn't choose a value!"; break; endswitch; // Результат выглядит так: value is 0.4 value is 0.6 • Отсутствие команды breakпривело к тому, что была выполнена не только команда printв той секции, где было найдено совпадение, но и команда printв следующей секции. Затем выполнение команд конструкции switchпрервалось из-за команды switch, следующей за второй командой print.

  19. Команда break • Команда break немедленно прерывает выполнение той конструкции while, for или switch, в которой она находится. • В общем виде синтаксис команды выглядит так: break n • Необязательный параметр n определяет количество уровней управляющих конструкций, завершаемых командой break. Например, если команда break вложена в две команды while и после break стоит цифра 2, происходит немедленный выход из обоих циклов. • По умолчанию значение n равно 1; выход на один уровень может обозначаться как явным указанием 1, так и указанием команды break без параметра. • Важно: команда if не относится к числу управляющих конструкций, прерываемых командой break. • Рассмотрим пример использования команды break в цикле foreach: $arr = array(14, 12, 128, 34, 5); $magic number = 128: foreach ($arr as $val): if (Sval == $magic_number): print "The magic number is in the array!"; break; endif; print "val is Sval <br>"; endforeach; // Если значение $magic_number присутствует в массиве $аrr (как в приведенном примере), поиск прерывается. // Результат выглядит так: val is 14 val is 12 The magic number is in the array!

  20. Команда continue • При выполнении команды continue в цикле пропускаются все оставшиеся команды текущей итерации и немедленно начинается новая итерация. • Синтаксис команды continue в общем виде: continue n • Необязательный параметр n указывает, на сколько уровней внешних циклов распространяется действие continue. • Например, нужно сосчитать простые числа в интервале от 0 до некоторой заданной границы. Предположим, что имеется функция is_prime(), которая проверяет, является число простым или нет: $boundary = 555; for ($i = 0; $i <= $boundary; $i++): if (! is_prime($i)): continue; endif; $prime_counter++; endfor; // Если проверяемое число является простым, блок команды if обходится и переменная $prime_counter увеличивается. В противном случае выполняется команда continue, в результате чего происходит немедленный переход в начало следующей итерации.

More Related