|
ых выше примерах оно и не было абсолютно оправданным, но, я
уверен, рано или поздно вам придется столкнуться с ситуацией, когда без этих
инструкций не обойтись.
Нетрадиционное использование
do-while и break
Есть один интересный побочный эффект, который дает нам инструкция break, и ко-
торый довольно удобно использовать для обхода "лишних" операторов (кстати, его
можно применять и в Си). Необходимость такого обхода возникает довольно часто,
причем именно при программировании сценариев. Рассмотрим соответствующий
пример (листинг 9.2):
Листинг 9.2. Модель сценария для обработки формы
Глава 9. Конструкции языка 159
. . .
$WasError=0; // индикатор ошибки — если не 0, то была ошибка
// Если нажали кнопку Submit (с именем $doSubmit)...
if(@$doSubmit) do {
// Проверка входных данных
if(неправильное имя пользователя) { $WasError=1; break; }
. . . и т. д.
if(неправильные данные) { $WasError=1; break; }
. . . и т. д.
// Данные в порядке. Обрабатываем их.
выполняем действия;
выводим результат;
завершаем сценарий;
} while(0);
. . .
Выводим форму, через которую пользователь будет запускать этот сценарий,
и, возможно, отображаем сообщение об ошибке в случае, если $WasError!=0.
Здесь представлен наиболее обычный способ для организации сценариев-диалогов.
Запустив сценарий без параметров, пользователь видит форму с приглашением вве-
сти свое имя, пароль и некоторые другие данные. При нажатии кнопки запускается
тот же самый сценарий, который определяет, что была нажата кнопка doSubmit, и
первым делом проверяет имя и пароль. Если они заданы неверно, то отображается
опять наша форма (и где-нибудь красным цветом сообщение об ошибке), в против-
ном случае сценарий завершается и выдает страницу с результатом.
Мы видим, что указанный алгоритм можно реализовать наиболее удобно, имея ка-
кой-то способ обрывания блока "проверки-и-завершения" и возврата к выводу формы
заново. Как раз это и делает конструкция
if(что_то) do { ... } while(0);
Очевидно, что тело цикла do-while выполняется в любом случае только один раз
(так как выражение в while всегда ложно). Тем не менее, такой "вырожденный"
цикл мы можем использовать для быстрого выхода из него посредством break.
Многие сразу возразят, что в таких случаях удачнее будет задействовать функции
и опера-
тор return. Однако в PHP как раз это довольно неудобно, поскольку для того,
чтобы из
функции добраться до глобальной переменной (коей является любой элемент формы),
нужно проделать несколько дополнительных шагов. Это, конечно, недостаток PHP, и
о
нем мы поговорим чуть позже.
Часть III. Основы языка PHP 160
Цикл foreach
Данный тип цикла предназначен специально для перебора всех элементов массива и
был добавлен только в четвертой версии языка PHP. Выглядит он следующим обра-
зом:
foreach(массив as $key=>$value)
команды;
Здесь команды циклически выполняются для каждого элемента массива, при этом
оче-
редная пара ключ=>значение оказывается в переменных $key и $value. Давайте
рассмотрим пример (листинг 9.3), где покажем, как мы можем отобразить
содержимое
всех глобальных переменных при помощи foreach:
Листинг 9.3. Вывод всех глобальных переменных
foreach($GLOBALS as $k=>$v)
echo "$k => $v \n";
?>
У цикла foreach имеется и другая форма записи, которую следует применять, когда
нас не
|
|