Добавить в цитаты Настройки чтения

Страница 233 из 299

Для того, чтобы выполнять различные команды в зависимости от условия, могущего принимать три или больше значений, следует использовать оператор switch (описание смотрите в руководстве), — аналог оператора case в VBA и некоторых других языках.

• for (начальное значение счетчика, условие продолжения цикла, изменение счетчика на каждом цикле) {…команды…;} — цикл, то есть повторение указанных в нем команд столько раз, сколько позволит условие изменения счетчика (т. е. переменной, специально выделенной для подсчета числа выполнений команд цикла). К примеру цикл for ($i =1; $i <= 10; $i++) {echo $i;} выводит в web-страницу числа с 1 до 10, так как в нем изначально устанавливается значение счетчика в 1 — $i=l, каждый цикл его значение увеличивается на 1 — $i++, а продолжаться он будет до тех пор, пока значение счетчика не превысит 10 (т. е. пока $i<=10).

Также в РНР можно использовать циклы без открытого объявления числа повторений — while (условие) {…команды…;} и do {…команды…} while (условие);. Описание их смотрите в руководстве по РНР, отличаются же они тем, что второй цикл (do…while) будет в любом случае выполнен не менее одного раза.

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

<?php if ($а==1) {?><р>Переменная а равна 1</p><?php }?>

эквивалентен коду

<?php if ($а==1) {echo "<р> Переменная а равна 1</р>";}?>,

однако первый вариант меньше нагружает процессор компьютера, на котором расположен интерпретатор РНР.

Из сказанного также следует, что все программы на РНР, расположенные на одной web-странице, представляют из себя одну большую программу, — несмотря на то, что они разделяются блоками обычного текста страницы. Именно поэтому переменная, объявленная в расположенном в начале страницы коде, сохраняет свое значение не только до ее конца, но и во всех присоединяемых с помощью команды include файлах. Вот, к примеру, демонстрация этого — рис. 19.1.

Рис. 19.1. Пример РНР-кода. Посмотрите внимательно на код (окна слева) и итог его выполнения (окно браузера справа). Обратите внимание, что переменная а, которой присвоено значение еще в первом программном блоке левой страницы, сохранила его не только в других ее блоках, но и в программе, расположенной во включаемой с помощью команды include страницы.

Однако помните, что если вы создаете функцию на РНР (попросту вставляя в программу инструкцию Function имя () {…команды функции…} с целью потом ее вызывать командой имя), то переменные, объявленные в ней, по умолчанию имеют установленное значение только внутри функции. Кроме того, также по умолчанию переменные, объявленные вне функции, в ней самой никакого значения не имеют. Подробнее о функциях и о переменных в них читайте в руководстве по РНР, например, с того же сайта http://php.spb.ru.





Обычно web-сервер настраивается так, что на предмет наличия программ на РНР просматриваются файлы, имеющие расширение. php, phtml, остальные же файлы передаются в браузер пользователя без поиска в них команд РНР. Делается так для более быстрой работы сервера, а также для обеспечения возможности установки на сервере разных интерпретаторов (например, SSI — Server Side Includes, в технологии, в какой-то мере предшествовавшей РНР), так как тогда каждому из интерпретаторов назначаются свои расширения для обработки соответствующих файлов.

Так как PHP-код полностью исполняется на web-сервере, то в страницах, выдаваемых браузеру, он будет отсутствовать, и если кто заинтересуется вашим опытом программирования, то вам придется отправлять ему этот код по почте, так как при просмотре сайта каким-нибудь образом узнать исходный PHP-код его страниц нельзя.

Работа с формами

Значения переменных можно передавать между различными страницами сайта — с помощью использования форм. Формой называется конструкция, состоящая из поименованных элементов особых типов, заключенных между HTML-тэгами <form..> и </form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпадающие меню, переключатели, квадратики для отметки галочкой checkbox'ы, а также картинки формата jpg или gif.

Наиболее важным свойством формы является то, что в ее заголовке — в открывающем тэге <form..> можно указать адрес какого-либо файла, и тогда при его загрузке в программный код этого файла, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме — в частности, значения всех элементов формы, как если бы эти значения были установлены в программе, расположенной в самом загружаемом файле. Таким образом можно передавать значения переменных между различными web-страницами, используя их в программном коде. Имена переменных соответствуют тем именам, которые были даны элементам формы в их тэгах, а значения — соответственно значениям этих элементов: для поля ввода текста — введенному тексту, для переключателя или checkbox'а — True при отмеченном и False при неотмеченном, для рисунка — координаты указателя мыши относительно верхнего левого угла изображения, для выпадающего меню (элемент <select name="HMH" Xoption value="textl ">text</option>…</select>) — значение параметра value выбранного пункта option.

Пример создания и применения формы приведен ниже, в разделе "Практическое использование".

Зачем он нужен?

Можно спросить: а зачем же может вообще потребоваться РНР? Разве обычных HTML и пары JavaScript не достаточно для создания красивой web-страницы?

Ну, во-первых, РНР может очень серьезно облегчить работу создателя сайта. С помощью команды include() можно автоматически вставлять один и тот же фрагмент HTML-кода во множество страниц, просто поместив в них эту команду с именем файла, содержащего код общей части. Причем этот код тоже может меняться в зависимости от страницы, в которую он включается, — достаточно в этой странице установить значение какой-либо переменной, а в коде общей части поместить инструкцию if, результат работы которой зависит от этого значения. В результате для обновления такой общей части будет достаточно отредактировать один файл — тот, который ее, собственно, и содержит, — и тогда для посетителей сайта соответственно изменятся все его страницы, как если бы вы все их вручную отредактировали.

Работа web-мастера по поддержке сайта при использовании РНР заметно облегчается. К примеру, немного поработав, можно сделать сценарий, "пробегающий" по всем файлам в каком-либо каталоге и "вытаскивающий" оттуда какие-либо фрагменты (например, содержимое тэгов "meta" — функция get_meta_tags). Таким образом можно, скажем, автоматически создавать оглавления журналов или библиотек: стоит поместить в каталог новую статью (оформленную согласно определенным правилам), как она тут же станет появляться в оглавлении на главной странице без необходимости эту главную страницу обновлять вручную.

С помощью РНР можно серьезно облегчить частое обновление страницы — так, если страница содержит часто меняющуюся вставку (например, новости), то будет неплохо поместить на место этих новостей инструкцию include ("file"), а в этом файле разместить текст новостей. В результате при обновлении новостей редактированию придется подвергать лишь сам их текст, а не HTML-код заглавной страницы, что и самому делать легче, и неопытному помощнику доверить можно.