3.4. Циклы
Циклы позволяют повторять строки программного кода после проверки выполнения определенного условия. Например, необходимо прочесть все строки из файла до его конца. Можно распечатать часть HTML-кода, повторив его десять раз, или запрограммировать три попытки подключения к базе данных, или прочесть данные из файла до его конца. Все эти действия программируются с помощью циклов.
Каждый цикл выполнения кода внутри цикла называется итерацией. Программный код внутри цикла повторяется до тех пор, пока не будет выполнено условие завершения. Язык PHP поддерживает три типа циклов, которые отличаются друг от друга тем, как они осуществляют итерации, какие действия выполняют перед началом цикла и когда осуществляется проверка условия завершения цикла, в начале или в конце цикла.
Оператор while
Простейшим циклом является цикл while. Выражение проверяется сразу же при первом удобном случае. Если это условие является ложным, программный блок просто пропускается, а если условие дает значение "истина", программный блок выполняется, после чего управление передается обратно наверх и опять проверяется условие. На рис. 3.4 показана структура оператора while.
Цикл while имеет смысл в том случае, когда вы не знаете, сколько итераций должен сделать данный программный код, - так бывает, например, при чтении строк из файла или выборке из базы данных при помощи запроса. Для того чтобы узнать, как это работает, посмотрим на код, распечатывающий названия дней недели, начиная с текущего дня и заканчивая пятницей.
Цикл while (листинг 3.5) проверяет, чтобы дата, хранящаяся в переменной currentDate, не была пятницей (Friday). Если день является пятницей, выполнение цикла завершается и будет продолжено после закрывающих фигурных скобок. Но если сегодня не пятница, то распечатывается элемент списка с названием дня и к переменной currentDate прибавляется 24 часа. В этом месте достигается конец программного блока, и управление передается обратно в начало цикла.
Текущая дата снова проверяется на соответствие пятнице. Вот так постепенно будет достигнута пятница. Соответственно значение переменной currentDate станет пятницей, и цикл будет завершен. Но что будет, если запрограммировать что-то нелогичное, сравнивая, например, текущую дату со значением "Workday"? Дня недели с таким названием не существует, поэтому операция проверки всегда будет давать значение "истина". Это значит, что проверка date("l", $currentDate) != "Workday" всегда даст значение "истина". В результате получаем так называемый вечный цикл. Для достижения аналогичного результата лучше написать while(TRUE), что будет гораздо проще и прозрачнее.
| Листинг 3.5. Использование цикла while для печати названий дней недели_
<?php
// Присвоить переменной $currentDate значение текущей даты в секундах $currentDate = time();
// Напечатать какой-нибудь поясняющий текст print("До пятницы осталось (дней):^"); print("<ol>n");
while(date("l", $currentDate) != "Friday")
{
// Распечатать название дня недели
print("<li>" . date("l", $currentDate) . "</li>n"); // Прибавить к переменной $currentDate 24 часа $currentDate += (60 * 60 * 24);
}
print("</ol>n");
?>
Вечный цикл также называется неопределенным. Если вы вдруг обнаружите, что ваша страница загружается очень медленно, то вполне вероятно, что виной тому будет где-то запрограммированный вами бесконечный цикл. К счастью, машина PHP по умолчанию останавливает любой сценарий, если он занимает больше 30 секунд процессорного времени. Этот тайм-аут можно изменить с помощью функции set_time_limit. Иногда неопределенный цикл может создаваться преднамеренно, и его можно прервать где-то посередине выполнения. Для этих целей вполне может пригодиться оператор break.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Операторы управления. Часть Третья.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Операторы управления. Часть Вторая. | PHP. Операторы управления. Часть Четвёртая. |