Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
178 Кб
Скачать
☆

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

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

Управляющие конструкции обычно проверяют условия на истинность или ложность, и в зависимости от результата проверки выполняется то или иное действие. Рассмотрим выражение $а == $b. Это выражение истинно, если $а равно $b, и ложно в противном случае. Результат истинного выражения считается равным 1, а результат ложного выражения равен 0. Рассмотрим следующий фрагмент:

$а = 5;

$b = 5;

print $а == $b;

В результате выводится значение 1. Если изменить $а или $Ь и присвоить переменной значение, отличное от 5, выводится 0.

if

Команда if представляет собой разновидность команды выбора, которая вычисляет значение выражения и в зависимости от того, будет ли полученный результат истинным или ложным, выполняет (или не выполняет) блок программного кода. Существует две общих формы команды i f:

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. Having a party perhaps?";

}

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

if ($cooking_weight < 100)

print "Are you sure this is enough?";

elseif

Команда elseif добавляет в управляющую конструкцию if дополнительный уровень проверки и увеличивает количество условий, на основании которых принимается решение:

if (выражение)

{

блок

}

elseif (выражение)

{

блок

}

В PHP существует альтернативное представление команды elself -- в виде двух отдельных слов else if. Оба варианта приводят к одинаковым результатам, а альтернативное представление поддерживается исключительно для удобства. Команда elself особенно полезна в тех случаях, когда происходит последовательное уточнение проверяемых условий. Обратите внимание: условие elself вычисляется лишь в том случае, если все предшествующие условия if и elself оказались ложными.

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. Having a party perhaps?";

}

}

else

{

print "Whoa! Who are you cooking for,a football team?";

}

Вычисление нескольких условий

При выборе логики работы программы в управляющей структуре можно проверять комбинацию сразу нескольких условий:

if (($cooking_weight > 0) && ($cooking_weight < 200))

{

print "This is enough pasta (< 200g) for 1-2 people";

}

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

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 -- конечно, этого быть не должно.

do. .while

Цикл do. .while работает почти так же, как и цикл while, описанный в предыдущем разделе, однако в do. .while условие проверяется не в начале, а в конце каждой итерации. Учтите, что цикл do. .while всегда выполняется хотя бы один раз, а цикл 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.";

При выполнении этого примера будет получен тот же результат, что и при выполнении его прототипа из предыдущего раздела.

В цикле do. .while не поддерживается альтернативный синтаксис (ограничение блоков при помощи : и завершающего ключевого слова), поэтому блок может заключаться только в фигурные скобки.

for

Цикл for обеспечивает еще одну возможность многократного выполнения блоков. Он отличается от цикла while только тем, что условие изменяется в самой управляющей конструкции, а не где-то внутри блока команд. Как и в случае с циклом while, цикл выполняется до тех пор, пока проверяемое условие остается истинным. Общая форма конструкции for выглядит так:

for (инициализация: условие; приращение)

{

блок

}

Условная часть цикла for в действительности состоит из трех компонентов. Инициализация выполняется всего один раз и определяет начальное значение управляющей переменной цикла. Условие проверяется в начале каждой итерации и определяет, должна ли выполняться текущая итерация или нет. Наконец, приращение определяет изменение управляющей переменной при каждой итерации. Возможно, термин «приращение» в данном случае неточен, поскольку переменная может как увеличиваться, так и уменьшаться в соответствии с намерениями программиста. Следующий пример демонстрирует простейший случай применения цикла for:

// Обратная косая черта предотвращает возможную интерполяцию переменной $1

for ($i = 10; $1 <- 50: $1 +=10) :

print "\$i = $i <br>"; endfor

Выполнение этого фрагмента дает следующий результат:

$i = 10

$i = 20

$i = 30

$i = 40

$i - 50

В этом примере управляющая переменная $i инициализируется значением 10. Условие заключается в том, что цикл продолжается до тех пор, пока $i не достигнет или не превысит пороговую величину 100. Наконец, при каждой итерации значение $i увеличивается на 10. В результате команда print выполняется 10 раз, каждый раз выводя текущее значение $i. Обратите внимание: для увеличения $i на 10 используется оператор сложения с присваиванием. Для этого есть веские причины, поскольку циклы for в PHP не поддерживают более традиционной записи $i = $i + 10.

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

Хотя циклические конструкции for и while выполняют практически одинаковые функции, считается, что цикл for делает программу более наглядной. Это объясняется тем, что программист при виде команды for немедленно получает всю необходимую информацию о механике и продолжительности цикла. С другой стороны, в командах while приходится тратить лишнее время на поиск обновлений управляющих переменных -- в больших программах это может занимать немало времени.

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.

switch

Принцип работы конструкции switch отчасти напоминает if -- результат, полученный при вычислении выражения, проверяется по списку потенциальных совпадений.

Это особенно удобно при проверке нескольких значений, поскольку применение switch делает программу более наглядной и компактной. Общий формат команды switch:

switch (выражение)

{

case (условие):

блок

case (условие):

блок

...

default:

блок

}

Проверяемое условие указывается в круглых скобках после ключевого слова switch. Результат его вычисления последовательно сравнивается с условиями в секциях case. При обнаружении совпадения выполняется блок соответствующей секции. Если совпадение не будет обнаружено, выполняется блок необязательной секции default.

Вы должны помнить, что при отсутствии в секции case команды break (см. следующий раздел) выполнение switch продолжается со следующей команды до тех пор, пока не встретится команда break или не будет достигнут конец конструкции switch.

break

Команда break немедленно прерывает выполнение той конструкции while, for или switch, в которой она находится. Эта команда уже упоминалась в предыдущем разделе, однако прерывание текущего цикла не исчерпывает возможностей команды break. В общем виде синтаксис break выглядит так:

break n;

continue

Остается рассмотреть еще одну управляющую конструкцию PHP -- continue. При выполнении команды continue в цикле пропускаются все оставшиеся команды текущей итерации и немедленно начинается новая итерация. Синтаксис команды continue в общем виде:

continue n;

Необязательный параметр n указывает, на сколько уровней внешних циклов распространяется действие continue.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]