|
нтересует значение ключа очередного элемента. Выглядит она так:
foreach(массив as $value)
команды;
В этом случае доступно лишь значение очередного элемента массива, но не его
ключ.
Это может быть полезно, например, для работы с массивами-списками.
Цикл foreach оперирует не исходным массивом, а его копией. Это означает,
что любые изменения, которые вносятся в массив, не могут быть "видны" из
тела цикла. Что позволяет, например, в качестве массива использовать не
только переменную, но и результат работы какой-нибудь функции, возвра-
щающей массив (в этом случае функция будет вызвана всего один раз — до
начала цикла, а затем работа будет производиться с копией возвращенного
значения).
В следующей главе мы рассмотрим ассоциативные массивы и все, что к ним относит-
ся, гораздо более подробно.
Глава 9. Конструкции языка 161
Конструкция switch-case
Часто вместо нескольких расположенных подряд инструкций if-else целесообразно
воспользоваться специальной конструкцией switch-case:
switch(выражение) {
case значение1: команды1; [break;]
case значение2: команды2; [break;]
. . .
case значениеN: командыN; [break;]
[default: команды_по_умолчанию; [break]]
}
Делает она следующее: вычисляет значение выражения (пусть оно равно, например,
V), а затем пытается найти строку, начинающуюся с case V:. Если такая строка
об-
наружена, выполняются команды, расположенные сразу после нее (причем на все
последующие операторы case что_то внимание не обращается, как будто их нет, а
код после них остается без изменения). Если же найти такую строку не удалось,
вы-
полняются команды после default (когда они заданы).
Обратите внимание на операторы break (которые условно заключены в квадратные
скобки, чтобы подчеркнуть их необязательность), добавленные после каждой строки
команд, кроме последней (для которой можно было бы тоже указать break, что не
имело бы смысла). Если бы не они, то при равенстве V=значение1 сработали бы не
только команды1, но и все нижележащие.
Вот альтернативный синтаксис для конструкции switch-case:
switch(выражение):
case значение1: команды1; [break;]
. . .
case значениеN: командыN; [break;]
[default: команды_по_умолчанию; [break]]
endswitch;
Инструкция require
Эта инструкция позволяет нам разбить текст программы на несколько файлов. Ее
формат такой:
require имя_файла;
При запуске (именно при запуске, а не при исполнении!) программы интерпретатор
просто заменит инструкцию на содержимое файла имя_файла (этот файл может так-
же содержать сценарий на PHP, обрамленный, как обычно, тэгами и ?>). Причем
сделает он это только один раз (в отличие от include, который рассматривается
Часть III. Основы языка PHP 162
ниже): а именно, непосредственно перед запуском программы. Это бывает довольно
удобно для включения в вывод сценария всяких "шапок" с HTML-кодом. Например
(листинги 9.4, 9.5 и 9.6):
Листинг 9.4. Файл header.htm
Title!
Листинг 9.5. Файл footer.htm
©My company, 1999.
Листинг 9.6. Файл script.php
require "header.htm";
. . . работает сценарий и выводит само тело документа
require "footer.htm";
?>
Безусловно, это лучше, чем включать весь HTML-код в сам сценарий вместе с инст-
рукциями программы. Вам скажет спасибо тот, кто будет пользоваться вашей про-
граммой и захочет изменить ее внешний вид. Однако, несмотря на кажущееся удоб-
ство, это все же плохая практика. Действительно, наш сценарий разрастается аж
до
трех файлов! А как было сказано выше, чем меньше файлов использует программа,
тем легче с ней будет работать вашему дизайн
|
|