Как упоминалось ранее, PEAR управляет базой кода приложения PEAR по определенным категориям. Ваш код PEAR может быть организован в соответствующие каталоги, и другие люди могут легко получать и делиться вашими результатами. PEAR — это не просто хранилище кода, это также стандарт. Использование этого стандарта для написания PHP-кода повысит читаемость и возможность повторного использования вашей программы, а также уменьшит вероятность ошибок. PEAR создает для вас структуру, предоставляя два класса, реализующие такие функции, как деструкторы и перехват ошибок. Эти функции можно использовать посредством наследования.
Правила кодирования PEAR включают правила отступов, структуры управления, вызовы функций, определения функций, комментарии, включенный код, теги PHP, блоки комментариев заголовков файлов, теги CVS, образцы URL-адресов и именование констант. Вот краткое введение:
Правила отступов:
PEAR требует 4 пробела для отступа в коде, и TAB не используется. Если вы используете VIM, установите следующие настройки в ~/.vimrc: setexpandtab
установить ширину сдвига = 4
установить табстоп = 4
Если вы используете Emacs/XEmacs, вам необходимо установить indent-tabs-mode в ноль.
Но если вы, как и я, любите использовать (X)Emacs для редактирования PHP-файлов, я настоятельно рекомендую вам установить PHP-MODE, чтобы при написании кода PEAR он автоматически настраивал ваш стиль отступов. Конечно, существует множество PHP-моделей. MODE Очень хорошая функция, вы можете скачать последнюю версию PHP-MODE из списка ресурсов.
Структура управления:
Упомянутые здесь структуры управления включают в себя: if for while, переключатель и т. д. Для управляющих структур после ключевого слова должен быть пробел (например, if for ..), а затем управляющие круглые скобки, чтобы его нельзя было перепутать с вызовами функций. Кроме того, вам следует попробовать использовать фигурные скобки {}. настолько полно, насколько это возможно, даже если это синтаксически необязательно. Это предотвратит логическую путаницу или ошибки, когда вам понадобится добавить новые строки кода в будущем. Вот пример: if ((условие1) && (условие2)) {
Положение 1;
}esleif ((Условие 3) || (Условие 4)) {
Положение 2;
}еще {
Положение 3;
}
Вызов функции:
Для вызовов функций не должно быть пробела между именем функции и открывающей скобкой ( (), для параметров функции должно быть такое же расстояние между разделительной запятой и следующим параметром, а между последним параметром не должно быть пробела. параметр и закрывающую скобку. Ниже приведен стандартный вызов функции $result = foo($param1, $param2, $param3);
Нестандартное написание:
$result=foo ($param1,$param2,$param3);
$result=foo($param1,$param2, $param3);
Кроме того, если вы хотите присвоить возвращаемый функцией результат, между знаком равенства и назначенной переменной должен быть пробел. В то же время, если это серия связанных операторов присваивания, вы добавляете соответствующие пробелы для выравнивания. их, например: $result1 = $foo($param1, $param2, $param3);
$var2 = $foo($param3);
$var3 = $foo($param4, $param5);
Определение функции:
Определение функции соответствует соглашению «одна истинная фигурная скобка»: function Connect(&$dsn, $persistent = false){
если (is_array($dsn)) {
$dsninfo = &&dsn;
} еще {
$dsninfo = DB::parseDSN($dsn);
}
if (!$dsninfo || !$dsninfo['phptype']) {
вернуть $this->raiseError();
}
вернуть истину;
}
Как показано выше, необязательные параметры должны находиться в конце списка параметров и всегда стараться возвращать значимые значения функции.
По поводу комментариев:
Для онлайн-документации классов ее необходимо конвертировать с помощью PHPDoc, как и JavaDoc. PHPDoc также является приложением PEAR. Для более подробного ознакомления вы можете перейти на http://www.phpdoc.de/ и просмотреть его. В дополнение к онлайн-документации классов рекомендуется использовать комментарии, не относящиеся к документации, для пояснения вашего кода. Когда вы видите фрагмент кода, вы думаете: «О, я не думаю, что вам нужно тщательно описывать его в документации». . Тогда вам лучше дать этому коду простой комментарий, чтобы вы не забыли, как он работает. Для форм комментариев хороши оба варианта C /* */ и C++. Однако не используйте метод комментария # Perl или оболочки.
Содержит код:
Всякий раз, когда вам нужно безоговорочно включить файл класса, вы должны использовать require_once; когда вам нужно условно включить файл класса, вы должны использовать include_once. Это гарантирует, что файл, который вы хотите включить, будет включен только один раз, и эти два оператора оба; используйте один и тот же список файлов, поэтому вам не придется беспокоиться о том, что они перепутаются. Как только require_once включает файл, include_once не будет снова включать тот же файл, и наоборот.
Разметка PHP-кода:
Всегда определяйте свой PHP-код, а не просто используйте его. Это обеспечивает совместимость PEAR и облегчает межплатформенное портирование.
Объявление комментария в заголовке файла:
Для всех файлов кода PHP, которые необходимо включить в основную версию PEAR, необходимо добавить следующий комментарий в начале файла: /* vim: set expandtab tabstop=4 Shiftwidth=4: */
// +----------------------------------------------- --- -----------------------+
// | версия PHP 4.0 |
// +----------------------------------------------- --- -----------------------+
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 Группа PHP |
// +----------------------------------------------- --- -----------------------+
// | На этот исходный файл распространяется лицензия PHP версии 2.0, |
// | который входит в состав этого пакета в файле LICENSE и является |
// | доступно во всемирной паутине по адресу |
// | http://www.php.net/license/2_02.txt |
// | Если вы не получили копию лицензии PHP и не можете |
// | получить его через всемирную паутину, отправьте сообщение по адресу |
// | [email protected] , чтобы мы могли немедленно отправить вам копию |
// +----------------------------------------------- --- -----------------------+
// | Авторы: Оригинальный автор |
// | Ваше имя |
// +----------------------------------------------- --- -----------------------+
//
// $Идентификатор$
Для файлов, которые не входят в базовый код PEAR, рекомендуется также иметь подобный блок комментариев в начале файла с указанием авторских прав, лицензии, автора и т. д. В то же время добавьте MODELINE VIM в первую строку, чтобы стиль кода PEAR можно было сохранить в VIM.
CVS-разметка:
Как показано выше, добавьте тег идентификатора CVS к каждому файлу. Если файл, который вы редактируете или изменяете, не имеет этого тега, добавьте его или замените аналогичным выражением в исходном файле (например, «Последнее изменение» и т. д.). )
Пример URL:
Вы можете следовать RFC 2606 и использовать « www.example.com » в качестве всех примеров URL.
Постоянное именование:
Константы следует по возможности писать заглавными буквами, а для облегчения понимания используйте символы подчеркивания для разделения каждого слова. В то же время вы должны указать префикс имени пакета или имени класса, в котором находится константа. Например, константы в классе Bug должны начинаться с Bug_. Выше приведены правила кодирования PEAR. Подробные правила кодирования см. в описании файла CODING_STANDDARD в PEAR. Чтобы лучше понять эти правила кодирования, вы также можете обратиться к коду существующего основного модуля PEAR.
Начните работу с PEAR
Использовать PEAR очень просто, вам нужно всего лишь определить свою собственную программу PEAR следующим образом: require_once "PEAR.php";
класс your_class_name расширяет PEAR{
Определение вашего класса...
}
Конечно, вам необходимо соблюдать упомянутые выше правила кодирования PEAR, и тогда вы сможете реализовать то, что хотите, внутри своего класса. Далее давайте обсудим это. На самом деле PEAR предоставляет нам два предопределенных класса: PEAR: это базовый класс PEAR, и все расширения PEAR должны наследовать его. PEAR_Error: базовый класс обработки ошибок PEAR. Вы можете создать собственный класс обработки ошибок.
Вообще говоря, вам не следует создавать экземпляр PEAR напрямую, а самостоятельно создать новый класс, а затем создать экземпляр этого нового класса. В качестве базового класса PEAR предоставляет нам несколько полезных функций, наиболее важными из которых являются деструкторы и
деструкторы обработки ошибок.
PHP поддерживает конструкторы, но не поддерживает деструкторы. Однако PHP предоставляет функцию Register_shutdown_function(), которая может вызвать зарегистрированную функцию до завершения сценария. Поэтому PEAR использует эту функцию для имитации деструктора. Если у вас есть подкласс PEAR под названием mypear, то в классе mypear вы можете определить функцию. Имя функции представляет собой подчеркивание плюс имя вашего класса _mypear(). Эта функция является деструктором этого класса. Однако этот деструктор отличается от деструктора в C++. Он будет выполняться не при удалении объекта, а при завершении скрипта. В конце концов, это всего лишь симуляция. Поскольку используется Register_shutdown_function(), напечатанная информация не будет возвращена браузеру в вашем деструкторе. Кроме того, в вашем конструкторе вам необходимо вызвать конструктор его родительского класса, поскольку PHP не будет автоматически вызывать конструктор родительского класса, и деструктор необходимо зарегистрировать в конструкторе PEAR. Мы можем это посмотреть. PEAR Исходный код: функция PEAR() {
if (method_exists($this, "_".get_class($this))) {
глобальный $_PEAR_destructor_object_list;
$_PEAR_destructor_object_list[] = &this;
}
если ($this->_debug) {
printf("Вызван конструктор PEAR, class=%sn",
get_class($this));
}
.....
функция _PEAR_call_destructors() {
глобальный $_PEAR_destructor_object_list;
if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) {
сброс ($_PEAR_destructor_object_list);
while (list($k, $objref) = каждый($_PEAR_destructor_object_list)) {
$destructor = "_".get_class($objref);
если (method_exists($objref, $destructor)) {
$objref->$деструктор();
}
}
//Очистить список зарегистрированных объектов,
//Предотвращаем повторные вызовы
$_PEAR_destructor_object_list = массив();
}}
....
Register_shutdown_function("_PEAR_call_destructors");
Приведенный выше код показывает, как PEAR реализует деструктор. В функции компонента он проверяет, есть ли деструктор в текущем классе. Если да, то ссылка текущего класса будет помещена в глобальный список в _ In PEAR_call_destructors. , проверьте, имеет ли каждый элемент глобального списка соответствующий деструктор, если да, вызовите его и, наконец, очистите глобальный список.
В последней строке кода в PEAR.php вызовите Register_shutdown_function("_PEAR_call_destructors"), чтобы зарегистрировать _PEAR_call_destructors, чтобы при выполнении скрипта PHP вызывал обратно эту функцию. Используя деструктор, вы можете выполнить некоторую необходимую «последующую» работу перед выходом после обработки запроса пользователя. Типичными примерами являются закрытие открытых файлов, отключение от базы данных, сохранение определенных данных на диске и т. д.
Обработка ошибок
PEAR позволяет обрабатывать ошибки разными способами. Вы не только просто возвращаете код ошибки или информацию об ошибке, но и можете вернуть объект PEAR_Error или новый объект ошибки, производный от PEAR_Error.
Объект ошибки в PEAR не ограничивает конкретную форму вывода. Он может просто фиксировать ошибку, не возвращая пользователю слишком много информации, или в то же время может вызывать специальную функцию обработки ошибок, даже если он выводит информацию об ошибке. , он также может. Вы вынуждены использовать формат HTML. Вы можете выводить формат XML, CSV или другие форматы, определенные вами. Вам нужно только получить новый класс из PEAR_Error, а затем создать и «бросить» этот новый класс. подходящее время.
Простая обработка ошибок:
В PEAR самая простая обработка ошибок — «выдать» ошибку. Вы просто создаете и возвращаете объект PEAR_Error. Вот простой пример: function myconnect($host = "localhost", $port = 1080){
$fp = fsockopen($host, $port, $errno, $errstr);
если (!is_resource($fp)) {
вернуть новую PEAR_Error($errstr, $errno);
}
вернуть $фп;
}
$sock = myconnect();
если (PEAR::isError($sock)) {
напечатайте "ошибка подключения: ".$sock->getMessage()."n"
}
Как показано в приведенном выше коде, после выполнения фрагмента кода, который может вызвать ошибку, вам необходимо использовать isError PEAR, чтобы определить, есть ли ошибка, и вы можете использовать getMessage PEAR_Error для получения последнего сообщения об ошибке.
и raiseError
в ключевых местах.
После PHP4.0.5 в PEAR появилось еще две функции:
setErrorHandling($mode, $options = null)
поднятьError($message = null, $code = null, $mode = null, $options = null, $userinfo = null)
Первый может установить режим обработки ошибок PEAR по умолчанию, а второй представляет собой функцию-оболочку, которая возвращает объект PEAR_Error. Это немного отличается от прямого создания и возврата объекта PEAR_Error. Если такие параметры, как $mode и $options, опущены, это будет. Создайте этот объект PEAR_Error, используя значения по умолчанию, которые вы можете настроить с помощью setErrorHandling().
PEAR_Error
PEAR_Error — это базовый класс объекта ошибки PEAR. В отличие от PEAR, вообще говоря, вы можете напрямую создать экземпляр PEAR_Error. Метод создания: $error = new PEAR_Error($message, $code, $mode, $options, $. userinfo );
$message — ваше сообщение об ошибке, $code — номер ошибки, а последние три параметра тесно связаны между собой:
$mode: режим обработки ошибок, который может быть следующими константами:
PEAR_ERROR_RETURN: возвращает только объект ошибки (режим по умолчанию).
PEAR_ERROR_PRINT: Распечатайте это сообщение об ошибке в функции сборки, но текущая программа продолжит работу.
PEAR_ERROR_TRIGGER: используйте PHP ignore_error() для вызова ошибки. Если вы настроили функцию обработки ошибок или установили уровень обработки ошибок PHP на E_USER_ERROR, текущая программа будет завершена.
PEAR_ERROR_DIE: Распечатать ошибку и выйти, программа завершается.
PEAR_ERROR_CALLBACK: используйте функцию или метод обратного вызова для обработки текущей ошибки и завершения программы.
$options: этот параметр работает только тогда, когда $mode равен PEAR_ERROR_TRIGGER и PEAR_ERROR_CALLBACK. Если это PEAR_ERROR_TRIGGER, $options должна быть одной из трех констант E_USER_NOTICE, E_USER_WARNING или E_USER_ERROR, что соответствует значению триггера_error в PHP. Если $mode равен PEAR_ERROR_CALLBACK, $options может быть строкой, содержащей имя функции, которую нужно вызвать обратно, или массивом из двух элементов, соответственно объектной переменной и строки (с указанием вызываемого метода).
$userinfo: хранит дополнительную информацию о пользователе. Здесь можно разместить соответствующую отладочную информацию.
В PEAR_Error есть несколько часто используемых методов, которые не описаны в документации PHP. Они перечислены здесь:
int getMode: Возвращает текущий режим обработки ошибок, целое число.
string getMessage: Возвращает текущее полное сообщение об ошибке, string.
смешанный getCallback: возвращает текущую информацию обратного вызова, которая может быть именем вызываемой функции или массивом (объектов, методов).
int getCode: возвращает целочисленный код ошибки.
string getType: возвращает неправильный тип, который является текущим именем класса, строкой.
string getUserInfo: возвращает дополнительную информацию о пользователе, string.
строка getDebugInfo: содержимое такое же, как указано выше.
string toString: возвращает подробное строковое описание текущего объекта, включая режим обработки ошибок, уровень, информацию об ошибке, код ошибки, связанные функции обратного вызова и т. д.
Подводя итоги
, знакомство с PEAR окончено. Подводя итог, если вы хотите создать приложение-расширение PEAR, вам нужно сделать следующее:
require_once "PEAR.php"
Используйте класс your_pear_extend, расширяющий PEAR{}, чтобы определить новый класс.
В конструкторе вашего класса вызовите конструктор родительского класса PEAR: function your_pear_extend{
$this->ГРУША();
...
}
При необходимости определите свой деструктор _your_pear_extend
При необходимости создайте собственный класс обработки ошибок из PEAR_Error, чтобы установить режим обработки ошибок и вызывать ошибки, когда это необходимо.
После выполнения кода, который может генерировать ошибки, используйте PEAR::isError($obj) для обнаружения соответствующих ошибок.
Реализуйте свой собственный функционал.
В базовой версии PEAR уже имеется множество отличных модулей приложений, таких как PHPDoc, Cache и HTML.