Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

web - tec / PHP 5 для начинающи

.pdf
Скачиваний:
72
Добавлен:
12.06.2015
Размер:
26.79 Mб
Скачать

14

PEAR

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

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

По мере того как проекты разработчика становятся более зрелыми, он понимает, что может повторно использовать большую часть кода из предыдущих разработок (это еще одна причина использовать модульный, объектно+ориентированный под+ ход). Разработка по типу ‘‘найти и заменить’’ за годы сэкономила тысячи часов рабо+ ты программистов.

Конечно, возможны ситуации, когда воспользоваться нечем. Разработка некото+ рых компонентов может занимать чрезвычайно много времени, не внося фактически никакого полезного вклада в ядро проекта. В такой ситуации может возникнуть син+ дром ‘‘чистого листа’’ и появиться желание выпить еще одну чашку кофе, прежде чем браться за работу.

К счастью, самая трудная задача выполнима: к вашим услугам репозиторий, в кото+ ром хранятся тысячи полезных, хорошо протестированных, повторно используемых PHP+компонентов, каждый из которых можно бесплатно использовать и включать

вразрабатываемые приложения.

Вэтой главе рассматривается репозиторий PEAR, а также объясняются причины его возникновения и описываются ситуации, в которых он может помочь. Прочтя ма+ териал главы, читатель узнает, когда следует, а когда не следует использовать репози+ торий. Самое главное ++++++ научиться идентифицировать наиболее подходящие к разра+ батываемому проекту компоненты и интегрировать их в приложение.

PEAR 553

Что такое PEAR?

Репозиторий PEAR (PHP Extension and Application Repository ++++++ репозиторий PHP+расширений и приложений) был основан в 1999 году одним из самых уважаемых и продуктивных участников проекта PHP норвежцем Стигом С. Бэккеном (Stig S. Bak+ ken). Главной целью проекта PEAR является обеспечение официально утвержденной библиотеки компонентов с открытым исходным кодом, в разработке которых прини+ мают участие PHP+архитекторы всего мира, а также создание интегрированного сред+ ства для инсталляции этих компонентов в PHP.

Разработчики, имеющие опыт работы с Perl, могут провести параллель с архивом CPAN (Comprehensive Perl Archive Network). PEAR заимствует многие полезные функции, предложенные CPAN, включая определение и автоматическую установку связанных компонентов во время инсталляции модулей.

Компоненты или пакеты в сети PEAR обеспечивают несметное число функций, включая соединение с базами данных, поддержку чтения и записи необычных форма+ тов файлов и компонентов для генерации сложного HTML+кода. Многие компоненты обладают поддержкой XML, т.е. в работе с ними можно применить навыки, получен+ ные в ходе изучения главы 11.

В дополнение к этому, PEAR обеспечивает ряд стандартов написания кода, кото+ рых должны придерживаться все, кто вносит свой вклад в развитие PEAR. Стандарты написания кода описываются далее.

СтруктураPEAR

Проект PEAR разделяется на несколько блоков:

библиотека пакетов, каждый из которых представляет отдельную область функциональности;

диспетчер пакетов PEAR (PEAR Package Manager), используемый для установки и удаления пакетов из инсталляции PHP;

PFC (PHP Foundation Classes ++++++ базовые классы PHP+кода) ++++++ подмножество классов в репозитории, состоящих из модулей в высшей степени стабильного и всесторонне протестированного кода, которые включаются в стандартную инсталляцию PHP;

PECL (PHP Extension Community Library ++++++ общественная библиотека PHP+рас+ ширений) ++++++ библиотека написанных на C (а не на PHP) компонентов, которая недавно стала самостоятельным проектом (более подробная информация при+ ведена на сайте http://pear.php.net);

PEAR+стандарты написания кода, которые будут рассматриваться в этой главе далее.

Пакеты в репозитории PEAR почти всегда поставляются в виде отдельных классов (понятие классов рассматривалось в предыдущих двух главах). Поскольку пакеты предназначены для повторного использования, объектно+ориентированная методика имеет особый смысл.

Это означает, что если читатель еще не проработал материал глав 12 и 13, то сей+ час это стоит сделать.

554 Глава 14

Базовые классы PHP-кода

Базовые классы PHP+кода или PFC (PHP Foundation Classes), которые включаются в обычную инсталляцию PHP, предоставляют множество важных подпрограмм, функции которых выходят за рамки внутренней функциональности PHP. Хотя эти классы, строго говоря, являются неофициальными, их широкое применение в PHP+ приложениях считается стандартным и утвердившимся.

Пакеты, входящие в состав PFC, как правило, находят широкий спектр примене+ ния и используются не только для узкоспециальных задач, например, для работы с малопонятными СУБД+платформами или форматами файлов. Более того, эти паке+ ты всегда считаются стабильными. На момент написания книги некоторые из базо+ вых классов распространялись в составе PHP5, включая класс Mail и класс OS Guess для определения используемой операционной системы, а также классы для создания соединений с другими сетевыми узлами. Некоторые из этих классов сами по себе мо+ гут показаться несколько непонятными, но PEAR+классы часто основательно их ис+ пользуют. Так как эти классы распространяются с PHP, их можно не устанавливать при инсталляции зависимых от них PEAR+классов. PFC+классы всегда оптимизирова+ ны для той версии PHP, с которой они поставляются; там, где диспетчер пакетов может сам загружать PFC+классы, возможны проблемы, связанные с малопонятной несовместимостью между версиями PHP и PFC. Явное связывание PFC+классов с ди+ стрибутивами PHP обеспечивает общий интерфейс к ядру PHP, и не+PFC+классы могут не зависеть от каких+либо различий между версиями PHP.

Чтобы подробнее узнать, какие модули поставляются как часть базовых классов, сле+ дует просмотреть каталог /usr/local/lib/php (на Unix+системах) или C:\PHP\PEAR (в Windows) свежей инсталляции PHP. Документация по использованию этих классов (как и других PEAR+классов) расположена на Web+сайте PEAR http://pear.php.net.

Поскольку эти пакеты включаются в стандартную поставку PHP, нет необходимо+ сти устанавливать их вручную, если только они не были явно отключены при установ+ ке среды разработки.

Теоретически их можно обновлять с помощью диспетчера пакетов PEAR (о кото+ ром речь пойдет далее), но на практике они обновляются, когда появляются новые версии PHP.

Общественная библиотека PHP-расширений

Общественная библиотека PHP+расширений, или PECL (произносится пикл), пер+ воначально была подмножеством репозитория PEAR, содержащим компоненты, на+ писанные не на PHP, а на C. Логическое обоснование подобного шага состоит в том, что такие компоненты обычно должны выполняться очень быстро; скомпилирован+ ный C+код работает намного быстрее, чем PHP+код, особенно это касается операций, в которых интенсивно используются математические вычисления. PECL позволяет разработчикам воспользоваться скоростью и эффективностью C и одновременно предоставляет интерфейс к таким компонентам через стандартный PHP+синтаксис.

Теперь PECL+библиотека выделена в отдельный проект, полностью независимый от PEAR, хотя в PECL используется тот же формат и политика, что и в PEAR.

Рассмотрение библиотеки PECL выходит за рамки данной главы, однако осведом+ ленность о PECL, несомненно, окажется полезной читателю. Хорошая отправная точка в поиске информации о PECL ++++++ Web+сайт проекта http://pecl.php.net.

PEAR 555

Диспетчер пакетов PEAR

Многие из пакетов в репозитории PEAR связаны зависимостями. Зависимость оз+ начает необходимость инсталляции одного класса для того, чтобы другой класс ус+ пешно функционировал. Например, PEAR+компонент, предоставляющий возмож+ ность выполнять POST HTTP+запросы, зависит от существования пакета общих HTTP+ функций, а этот пакет, в свою очередь, зависит от пакета TCP/IP+абстракций.

Очевидно, что, используя свежую инсталляцию PHP, разработчик может столк+ нуться с трудностями удовлетворения вручную всех зависимостей для определенного класса. Этот процесс значительно упрощается с помощью диспетчера пакетов PEAR (PEAR Package Manager).

Диспетчер пакетов предоставляет развитые функции для управления PEAR+па+ кетами в инсталляции PHP, но основная его цель заключается в том, чтобы облегчить пользователю установку и удаление PEAR+пакетов.

Диспетчер ‘‘знает’’ обо всех зависимостях, т.е. при установке определенного пакета, который зависит от одного или нескольких других пакетов, диспетчер также устанав+ ливает и эти связанные пакеты. Кроме того, диспетчер ‘‘знает’’ об иерархии зависи+ мостей, поэтому он гарантирует, что пакеты будут установлены в корректном порядке.

Установка пакетов с помощью диспетчера пакетов PEAR описана в этой главе далее.

Обзор PEAR-стандартов

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

‘‘Корректный’’ способ написания кода обсуждается уже около 30 лет, но едино+ гласного решения этого вопроса все еще не найдено. PHP отчасти является удачным потому, что с момента его создания прошло сравнительно немного времени и стили+ стические разногласия, которые наблюдаются в других языках, еще не успели поя+ виться. Авторы этой книги приняли решение, что примеры кода будут придерживать+ ся стандартов, определенных проектом PEAR. Эти стандарты известны как PEAR+ стандарты написания кода (PEAR coding standards, PCS). Таким образом, в книге ис+ пользуются такие же стандарты, какие проект PEAR требует от авторов пакетов.

Более того, если разработчик когда+либо захочет передать свои наработки проекту PEAR, с тем чтобы другие могли воспользоваться результатами его труда, то ему также придется придерживаться названных стандартов, в таком случае привычка использо+ вать их окажется очень полезной.

На Web+сайте PEAR очень подробно рассматривается тема стандартов написания кода, поэтому здесь обсуждаются лишь некоторые аспекты этих стандартов.

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

PEAR требует, чтобы весь код оформлялся соответствующими контексту отступа+ ми с использованием подходящего числа пробелов (а не символов табуляции). В слу+ чае PEAR один уровень отступа равен четырем пробелам.

Некоторые редакторы допускают такие настройки, при которых одно нажатие клавиши <Tab> автоматически вставляет в код вместо символа табуляции четыре пробела.

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

556 Глава 14

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

Фигурные скобки должны всегда использоваться в управляющих структурах (операторы while/if/switch/for/foreach), даже когда в блоке содержится всего одна строка и PHP+интерпретатор не требует применения скобок. Это значительно повышает читабельность кода. Открывающая скобка должна всегда находиться в той же строке, что и управляющий блок. Закрывающая скобка должна находиться в новой строке. PEAR никак не комментирует, следует ли ставить точку с запятой перед за+ крывающей фигурной скобкой.

С целью обеспечения четкости кода начало блока PHP+кода (т.е. <?php) всегда должно содержать буквы php (хотя формально это не обязательно).

Комментарии поощряются всегда, когда они повышают читабельность кода. Сле+ дует избегать использования предиката #, несмотря на то, что PHP допускает его ис+ пользование. Предпочтительнее использовать C+стиль ++++++ // (для однострочных ком+ ментариев) или символы /* и */ (для начала и конца многострочных комментариев).

Ниже приведен пример соответствующего PEAR+стандартам кода для управляю+ щей структуры:

<?php

if ((($x == 14) && ($y == 19)) || $z = 24) { print($strMyVal. "\n");

// Это выразительный комментарий

};

?>

Вызовы и определения функций

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

<?php

$strMyVar = myFunction($strA, $strB, $strC); $strAnotherVar = anotherFunctionWithNoParameters();

?>

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

<?php

function myFunction($strArg1, $strArg2)

{

return($strMyResult);

};

?>

Необязательные аргументы должны объявляться с использованием методики $strArg = ''. Необязательные аргументы всегда должны быть последними в списке аргументов.

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

PEAR 557

Соглашения по именованию

Именование переменных, классов и функций в языках, имеющих слабую типиза+ цию, таких как PHP, имеет особую важность.

В этой связи PEAR+соглашения выдвигают следующие требования.

Имена классов должны начинаться с прописной буквы, например, Publisher. Если класс имеет иерархическое расположение внутри PEAR, то это должно быть отражено в его имени, например, HTML_TreeMenu, где TreeMenu ++++++ ком+ понент внутри HTML+иерархии PEAR.

Имена функций должны начинаться с имени родительского пакета, за которым следу+ ет символ подчеркивания (если он применим), а затем описательное имя без симво+ лов подчеркивания. Все буквы первого слова или слога описательного имени долж+ ны быть строчными, а первая буква каждого последующего слова или слога должна быть прописной (если это применимо), например, XML_RPC_serializeData. Имена частных функций экземпляра или переменных класса, значения которых присваиваются только внутри других методов этого класса, должны начинаться с префикса _ (например, this->_currentStatus).

Имена констант должны состоять из прописных букв, для разделения слов сле+ дует использовать символ подчеркивания $HOME_DIRECTORY.

PEAR не определяет соглашений для именования рабочих переменных. Среди многих авторов PEAR+пакетов принято использовать венгерскую нотацию, с помощью которой в имени переменной указывается тип хранимых в ней данных; например, пе+ ременная $strMyVariable предназначена для хранения строки, а $intMyNumber ++++++

для хранения численного значения.

Авторы книги настоятельно рекомендуют принять этот метод кроме случаев, где он оказывается громоздким; например, переменные счетчиков циклов разумнее на+ зывать короткими именами $x, $y и $z, но такие имена не следует использовать для переменных, в которых хранятся значащие целые числа.

Установка PEAR-пакетов

Устанавливать PEAR+пакеты удивительно просто. Гораздо сложнее найти необхо+ димый для разрабатываемого проекта пакет. Часто простое ознакомление с интер+ фейсом пакета характеризуется крутой кривой изучения. По мере зрелости PEAR па+ кеты и поставляемая с ними документация значительно улучшаются.

Поиск PEAR-пакетов на сайте pear.php.net

Хорошей отправной точкой для поиска PEAR+пакетов является начальная страни+ ца проекта PEAR, http://pear. php.net.

Если вы знаете, какой пакет необходимо установить, можете смело переходить к разделу ‘‘Использование диспетчера пакетов’’, но если известна лишь некоторая функциональность, можно просмотреть доступные пакеты на сайте PEAR или вос+ пользоваться поиском по ключевому слову.

Для просмотра пакетов щелкните по ссылке ‘‘Packages’’ (пакеты) в правом верхнем углу страницы. Посетителям сайта Yahoo или любого другого иерархического катало+ га интерфейс должен показаться весьма знакомым. Выберите интересующую вас кате+ горию и просмотрите перечень всех входящих в нее пакетов.

558Глава 14

Вотличие от сайта Yahoo структура сайта PEAR не столь многоуровневая; напри+ мер, если щелкнуть по ссылке ‘‘HTML’’, то будут показаны все пакеты, входящие в ка+ тегорию HTML; здесь нет такого понятия, как подкатегория. Ссылки на последующие страницы сводят к минимуму переполнение экрана.

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

Изучение PEAR-классов и приложений

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

Важно то, что многие пакеты имеют ссылки на страницы с подробной справочной информацией о классах, методах и функциях пакета. Посетителям сайта www.php.net это должно показаться удобным и знакомым.

Единственное, чего здесь не следует делать, ++++++ загружать сам пакет. Для этого луч+ ше использовать диспетчер пакетов PEAR. Инсталляция пакетов вручную возможна, но эта тема выходит за рамки данной главы (установка пакета вручную подробно опи+ сана на Web+сайте PEAR).

Очень важно знать, когда действительно следует прибегать к PEAR*пакетам. Хотя в репозитории содержится множество великолепного программного обеспечения, некоторые пакеты являются незавершенными или нестабильными, другие могут

просто не подойти для разрабатываемого проекта. В ходе планирования PHP*проекта необходимо заблаговременно определить, в чем могут помочь репозитории, подобные PEAR, и когда они помочь неспособны. Поэтому прежде чем установить сроки проекта, следует основательно поэкспериментировать с найденными компонентами в безопасной среде. Если вы обнаружите, что создавать новый компонент придется с нуля, то почему бы не предложить этот компонент для включения в репозиторий PEAR? Это не только позволит тысячам других программистов воспользоваться результатами вашего труда, но может оказаться весьма полезным и для вас.

Установка и использование диспетчера пакетов PEAR

Диспетчер пакетов PEAR включается во все современные версии PHP и опреде+ ленно во все версии PHP5.

Винсталляциях PHP в Linux и других Unix+системах диспетчер пакетов должен быть уже установлен, если только он не был отключен во время первоначальной ус+ тановки PHP.

Вто же время в Windows требуется еще одна дополнительная операция. (Пользователи Linux могут пропустить этот раздел.)

Помните, что при развертывании завершенного приложения на реальном сервере, например, на Web*сервере провайдера Internet*услуг (ISP), для правильной работы приложения все необходимые ему PEAR*пакеты уже должны быть установлены

PEAR 559

провайдером. Если ISP не устанавливает PEAR*пакеты, то их можно установить вручную, хотя в этом случае автоматическое определение неудовлетворенных зависимостей будет недоступно. Более подробная информация об установке PEAR* пакетов вручную приведена на Web*сайте PEAR.

Установка диспетчера PEAR-пакетов для Windows

В рассматриваемом ниже примере предполагается, что PHP установлен в каталог C:\PHP (по умолчанию). Если это не так, необходимо исправить команды так, чтобы они соответствовали используемому каталогу инсталляции PHP.

Вызовите оболочку командной строки и введите следующую команду:

C:\>cd php\pear

C:\php\PEAR>..\php go-pear.php

Welcome to go-pear!

Сообщения сценария помогут установить диспетчер пакетов. Основное назначе+ ние сценария заключается в том, чтобы создать исполняемый файл pear, который можно будет запустить как в Linux/Unix+дистрибутивах.

Сценарий запросит параметры прокси+сервера, так как они понадобятся для за+ грузки и обновления базовых классов PEAR из Internet. Эти параметры записываются и используются при последующих загрузках PEAR+пакетов, поэтому очень важно не ошибиться во время их ввода. Большинству пользователей не требуется указывать прокси+сервер; в случае сомнений спросите об этих параметрах у провайдера или сис+ темного администратора.

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

На вопрос об установке PEAR+пакетов, встроенных в PHP, следует ответить утвер+ дительно.

После этого пакеты будут загружены, распакованы и, если не будет проблем с Internet+ соединением, установлены в обычный каталог библиотек PHP. В каталоге C:\PHP соз+ дается исполняемый файл pear; чтобы начать работу с диспетчером пакетов, необхо+ димо запустить этот файл. Затем сохраняются введенные параметры прокси+сервера.

Теперь можно использовать диспетчер пакетов.

Использование диспетчера пакетов

Чтобы запустить диспетчер пакетов, необходимо открыть окно командной строки (в Windows) или запустить оболочку (в Unix).

Для использования диспетчера пакетов желательно иметь права администратора или пользователя root (если такое возможно), в противном случае может выясниться, что отсутствуют права на запись файлов в каталог с библиотеками PHP.

Диспетчер пакетов предоставляет пользователю множество удобных команд, са+ мыми полезными из них являются install, uninstall и upgrade. Ниже приведены соответствующие примеры:

pear install имя_компонента

pear uninstall имя_компонента

pear upgrade имя_компонента

560 Глава 14

Необходимо убедиться, что имя компонента введено правильно с соблюдением регистра символов, пробелов и символов подчеркивания. Если все было сделано пра+ вильно, то на экране должны появиться следующие строки:

root@genesis:~# pear install HTML_TreeMenu downloading HTML_TreeMenu-1.1.9.tgz ...

...done: 49,213 bytes

install ok: HTML_TreeMenu 1.1.9 root@genesis:~#

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

В процессе работы диспетчера могут появляться сообщения со словом ‘‘deprecated’’ (устаревший). Дело в том, что некоторые пакты в PEAR написаны для PHP4, а версия 5 иногда выводит предупреждения, если синтаксис устанавливаемого пакета не согла+ суется с требованиями PHP5. В большинстве случаев эти предупреждения можно про+ сто проигнорировать; если пакет установился успешно, то все в порядке. На Web+ сайте PEAR можно найти примечания о совместимости установленного пакета.

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

Могут понадобиться (как в описанном ниже примере с компонентом HTML_TreeMenu) дополнительные действия, прежде чем пакет будет интегрирован в разрабатываемый код. Например, придется скопировать файлы данных (такие как GIF, JPEG или XML+ файлы конфигурации) в более удобный для проекта каталог. Подобные действия обычно описываются в документации к пакету.

Однако в девяти случаях из десяти использование диспетчера пакетов является самым простым способом добавления PEAR+пакетов в инсталляцию PHP. Диспетчер пакетов действительно удобный помощник.

Практика Проверка пригодности PEAR-компонента

Один из лучших способов изучить репозиторий PEAR и оценить пригодность ка+ кого+либо компонента заключается в установке и испытании этого компонента.

Предположим, например, что разрабатывается интранет+сайт для небольшой ком+ пании. Множество различных документов ++++++ страховки, больничные листы и сценарии праздничных мероприятий ++++++ должны быть доступны пользователям корпоративной сети. Разработчик полагает, что лучше всего реализовать на сайте сворачивающееся, иерархическое навигационное меню на основе DHTML (Dynamic HTML), похожее на меню справочного сайта Microsoft MSDN.

Мудро полагая, что путь к просветлению лежит через повторное использование кода, PHP+разработчик в поисках подходящего компонента обращается к Web+сайту PEAR, ис+ пользуя описанные ранее этапы. В конце концов, он находит компонент HTML_TreeMenu.

Подробная информация о пакете HTML_TreeMenu приведена на сайте PEAR http://pear.php.net/package/HTML_TreeMenu.

Используя диспетчер PEAR+пакетов, установите HTML_TreeMenu. Команды в сле+ дующем примере будут в основном одинаковыми как для Unix+, так и для Windows+

PEAR 561

инсталляции PHP. Просто введите эти команды в командной строке (в Unix это сле+ дует сделать от имени пользователя root):

pear install HTML_TreeMenu

downloading HTML_TreeMenu-1.1.9.tgz ...

...done: 49,213 bytes

install ok: HTML_TreeMenu 1.1.9

Если все выглядит нормально, то можно двигаться дальше и испытывать только что установленный пакет.

Чтобы генерировать дерево навигации исключительно с помощью PHP+операторов, класс HTML_TreeMenu можно использовать без каких+либо изменений. Однако гораздо полезнее было бы заставить его генерировать дерево навигации из XML+файла. Это по+ зволило бы часто обновлять навигационные ссылки, вообще не меняя PHP+кода. В более крупных проектах это также означает, что не знакомые с PHP сотрудники компании смогут обновлять навигационное меню, не беспокоя PHP+программистов.

Класс HTML_TreeMenu не имеет собственной поддержки генерации навигационных меню из XML+файлов. В версии для PHP4 рекомендуется устанавливать дополнитель+ ный класс (не входящий в репозиторий PEAR), который предоставляет такую поддерж+ ку. Однако этот дополнительный класс не обновляется и не поддерживает радикально измененную в PHP5 поддержку XML. Поэтому, чтобы добавить соответствующую функ+ циональность, придется написать собственный класс поддержки (он описывается

вэтой главе далее). Не стоит опасаться адаптации или расширения PEAR+классов, если это позволяет лучше реализовать собственные замыслы; нет предела совершенству.

Очевидно, что первым этапом является чтение документации. Просматривая страницу пакета на сайте PEAR, нетрудно убедиться, что на ней отсутствует важней+ шая ссылка на документацию (пользовательская документация имеется не во всех па+ кетах). Отчаиваться не стоит ++++++ не все потеряно.

Рассмотрим содержимое каталога /usr/local/lib/php/docs/HTML_TreeMenu

вUnix или C:\PHP\PEAR\pear\DOCS\HTML_TreeMenu в Windows. Здесь есть весьма полезный файл HTML_TreeMenu.pdf, который можно открыть с помощью Adobe Acrobat. В этом документе описаны некоторые подробности о различных свойствах и методах класса, т.е. API+интерфейс класса. Кроме того, в документе есть примеры использования класса. Ввиду упомянутой выше несовместимости следует игнориро+ вать рекомендации о разборе XML+файлов.

Чтобы продолжить работу с пакетом, создайте файл treemenutest.xml. Для про+ стоты используйте XML DTD+определение (определение типа документа), упомянутое

вдокументации к HTML_TreeMenu. Убедитесь, что созданный файл сохранен в том

каталоге, к которому PHP имеет доступ, например, C:\inetpub\wwwroot\xml в Windows или ~/public_html/xml в Unix. Если необходимо обеспечить безопас+ ность, то хранить этот файл там, где посетители сайта могут получить к нему доступ посредством браузера, не следует.

<?xml version="1.0" encoding="windows-1251"?> <treemenu>

<node text="В начало" icon="folder.gif" link="treemenutest.php" /> <node text="Здоровье и страховка" icon="folder.gif">

<node text="О больничных и страховке" icon="document.gif" link="#" /> <node text="Несчастные случаи" icon="document.gif" link="#" />

<node text="Болезнь" icon="document.gif" link="#" />

<node text="Длительная болезнь" icon=" document.gif" link="#" /> </node>

</treemenu>

Соседние файлы в папке web - tec