Pear

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

 

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

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

Компоненты или пакеты в сети PEAR обеспечивают несметное число функций, включая соединение с базами данных, поддержку чтения и записи необычных форматов файлов и компонентов для генерации сложного HTML+кода. Многие компоненты обладают поддержкой XML. В дополнение к этому, 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 почти всегда поставляются в виде отдельных классов. Поскольку пакеты предназначены для повторного использования, объектноориентированная методика имеет особый смысл.

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

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

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

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

Диспетчер пакетов PEAR
Многие из пакетов в репозитории PEAR связаны зависимостями. Зависимость означает необходимость инсталляции одного класса для того, чтобы другой класс успешно функционировал. Например, PEAR-компонент, предоставляющий возможность выполнять POST HTTP запросы, зависит от существования пакета общих HTTP функций, а этот пакет, в свою очередь, зависит от пакета TCP/IP абстракций. Поэтому, используя свежую инсталляцию PHP, разработчик может столкнуться с трудностями удовлетворения вручную всех зависимостей для определенного класса. Этот процесс значительно упрощается с помощью диспетчера пакетов PEAR (PEAR Package Manager). Диспетчер пакетов предоставляет развитые функции для управления PEAR пакетами в инсталляции PHP, но основная его цель заключается в том, чтобы облегчить установку и удаление PEAR пакетов. Диспетчер ‘‘знает’’ обо всех зависимостях, т.е. при установке определенного пакета, который зависит от одного или нескольких других пакетов, диспетчер также устанавливает и эти связанные пакеты. Кроме того, диспетчер ‘‘знает’’ об иерархии зависимостей, поэтому он гарантирует, что пакеты будут установлены в корректном порядке.

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

PEAR-стандарты написания кода (PEAR coding standards, PCS)  - набор требований, которые проект PEAR требует от авторов пакетов. Вкратце рассмотрим некоторые из них.

Управляющие структуры, комментарии и отступы.
PEAR требует, чтобы весь код оформлялся соответствующими контексту отступами с использованием подходящего числа пробелов (а не символов табуляции). В случае PEAR один уровень отступа равен четырем пробелам. Некоторые редакторы имеют настройки, при которых одно нажатие клавиши <Tab> автоматически вставляет в код вместо символа табуляции четыре пробела. Кроме отступов PEAR требует выразительного выделения конструкций. Например, если круглые скобки использовать не обязательно, но их присутствие улучшает понимание кода, то лучше все-таки их использовать. Пустые пространства должны использоваться только для обособления отдельных строк кода и комментариев, а там, где они включаются для прояснения кода, их количество по возможности должно быть минимальным. Фигурные скобки должны всегда использоваться в управляющих структурах (операторы while/if/switch/for/foreach), даже когда в блоке содержится всего одна строка и PHP+интерпретатор не требует применения скобок. Это значительно повышает читабельность кода. Открывающая скобка должна всегда находиться в той же строке, что и управляющий блок. Закрывающая скобка должна находиться в новой строке. PEAR никак не комментирует, следует ли ставить точку с запятой перед закрывающей фигурной скобкой. С целью обеспечения четкости кода начало блока PHPкода (т.е. <?php) всегда должно содержать буквы php (хотя формально это не обязательно). Комментарии поощряются всегда, когда они повышают читабельность кода. Следует избегать использования предиката #, несмотря на то, что PHP допускает его использование. Предпочтительнее использовать C стиль - // (для однострочных комментариев) или символы /* и */ (для начала и конца многострочных комментариев).

Вызовы и определения функций.
При вызове функций не должно быть пробелов между именем функции и открывающей круглой скобкой, а также между скобкой и первым аргументом функции. Если аргументы не передаются, то за открывающей скобкой сразу должна ставиться закрывающая. При объявлении функций правила использования фигурных скобок в управляющих структурах несколько изменяются: начальная скобка блока должна находиться в новой строке сразу после имени функции и определения списка аргументов . Необязательные аргументы должны объявляться с использованием методики $newArg = ''. Необязательные аргументы всегда должны быть последними в списке аргументов. Наконец, функция должна всегда возвращать значение, если это значение поддается интерпретации. По крайней мере, функция должна возвращать признак своего успешного или безуспешного выполнения.

Соглашения по именованию
Именование переменных, классов и функций в языках, имеющих слабую типизацию, таких как PHP, имеет особую важность.
В этой связи PEAR соглашения выдвигают следующие требования:
* Имена классов должны начинаться с прописной буквы, например, Publisher.
Если класс имеет иерархическое расположение внутри PEAR, то это должно
быть отражено в его имени, например, HTML_TreeMenu, где TreeMenu компонент внутри HTML иерархии PEAR.
* Имена функций должны начинаться с имени родительского пакета, за которым следует символ подчеркивания (если он применим), а затем описательное имя без символов подчеркивания. Все буквы первого слова или слога описательного имени должны быть строчными, а первая буква каждого последующего слова или слога должна
быть прописной (если это применимо), например, XML_RPC_serializeData. Имена частных функций экземпляра или переменных класса, значения которых присваиваются только внутри других методов этого класса, должны начинаться
с префикса _ (например, this->_currentStatus).
* Имена констант должны состоять из прописных букв, для разделения слов следует использовать символ подчеркивания $HOME_DIRECTORY.
PEAR не определяет соглашений для именования рабочих переменных. Среди многих авторов PEAR+пакетов принято использовать венгерскую нотацию, с помощью которой в имени переменной указывается тип хранимых в ней данных; например, переменная $strVariable предназначена для хранения строки, а $intNumber - для хранения численного значения.

Установка и использование диспетчера пакетов PEAR
Диспетчер пакетов PEAR включается во все современные версии PHP и определенно во все версии PHP5. Процесс установки пакетов подробно расписан на сайте http://pear. php.net. Я его рассматривать в кратком обзоре с Вашего позволения не буду.