Введение в pear: используйте pear для написания следующей программы на PHP.
Содержание:
Что такое груша
Зачем использовать грушу?
Какую пользу может принести мне груша?
Правила кодирования Pear начинают использовать Pear
Краткое изложение соответствующих ресурсов и представление автора
Пан Фан (ночной парусник) ( [email protected] )
Пекинская компания информационных технологий Saidi.com, Ltd.
В июне 2001 года вы, вероятно, уже были ветераном PHP и написали много отличного кода. Но если вы хотите добавить их в свой текущий проект сейчас, это немного сложно? Ваш друг хочет использовать ваш код в качестве модуля в своем проекте, но вы обнаруживаете, что используете совершенно другие стили кодирования. Позвольте ему адаптировать или даже переписать его!
Пожалуйста, следуйте за мной и напишите свою программу PHP, используя стандарт pear. Ваша программа будет более жизнеспособной. Ваша программа и код будут легко интегрироваться с кодами других экспертов. Pear похож на cpan для Perl, он заставит PHP генерировать более высокую мощность.
Что такое пара
Груша — это аббревиатура расширения PHP и репозитория приложений. Это хранилище кода для расширений и приложений PHP. Проще говоря, pear — это cpan PHP.
Зачем использовать грушу?
PHP — отличный язык сценариев, лаконичный и эффективный. С выпуском версии 4.0 все больше и больше людей используют его для разработки динамических веб-сайтов. Можно сказать, что PHP стал одним из лучших языков разработки в Интернете, особенно для веб-сайтов. Разработчики, которым необходимо иметь возможность быстро и эффективно разрабатывать приложения для малого и среднего бизнеса, выбирают PHP. Однако с ростом числа PHP-приложений ощущается нехватка унифицированных стандартов и эффективного управления этими приложениями. Поэтому сообществу PHP сложно делиться кодами и приложениями друг друга так же удобно, как людям в сообществе Perl. В PHP отсутствует возможность совместного использования кода и приложений, таких как Cpan. Единая база кода для классификации модулей кода приложения и управления ими (любой, кто знаком с Perl, знает, что cpan — это огромное хранилище модулей расширения Perl. Написанные модули приложения можно поместить в соответствующую классификацию). каталог под cpan, и другие люди могут его повторно использовать. Конечно, вам также необходимо следовать рекомендациям при написании модулей приложения).
По этой причине появился pear, и начиная с версии 4.04 он распространялся вместе с ядром PHP.
Какую пользу может принести мне груша?
1. Как упоминалось выше, груша управляет базой кода приложения груши по определенным категориям. Ваш код груши может быть организован в соответствующие каталоги, и другие люди могут легко получать и делиться вашими результатами.
2. Pear — это не только хранилище кода, но и стандарт. Использование этого стандарта для написания PHP-кода повысит читаемость и возможность повторного использования вашей программы, а также уменьшит вероятность ошибок.
3. Pear создает для вас структуру, предоставляя 2 класса для реализации таких функций, как деструкторы и перехват ошибок. Эти функции можно использовать посредством наследования.
Правила кодирования груши
Правила кодирования Pear включают правила отступов, структуры управления, вызовы функций, определения функций, комментарии, содержащие код, теги PHP, блоки комментариев в заголовках файлов, теги cvs, образцы URL-адресов и именование констант. Вот краткое введение:
Правила отступов:
Вам нужно использовать 4 пробела в груше для отступа кода и не использовать табуляцию. Если вы используете vim, установите следующие настройки в ~/.vimrc:
установить расширенную вкладку
установить ширину сдвига = 4
set tabstop=4
Если вы используете emacs/xemacs, вам необходимо установить для indent-tabs-mode значение nil.
Но если вы, как и я, любите использовать (x)emacs для редактирования php-файлов, я настоятельно рекомендую вам установить php-режим, чтобы при написании кода груши он автоматически настраивал ваш стиль отступов. Конечно, php-режим имеет. еще много Очень хорошая функция, вы можете скачать последнюю версию 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);
Определение функции:
Определения функций следуют соглашению «одна истинная скобка»:
функция подключения (& $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++ //. Однако не используйте метод # comment в Perl или оболочке.
Содержит код:
Всякий раз, когда вам нужно безоговорочно включить файл класса, вы должны использовать require_once; когда вам нужно условно включить файл класса, вы должны использовать include_once. Это гарантирует, что файл, который вы хотите включить, будет включен только один раз, и эти два оператора оба; используйте один и тот же список файлов, поэтому вам не придется беспокоиться о том, что они перепутаются. Как только require_once включает файл, include_once не будет снова включать тот же файл, и наоборот.
разметка php-кода:
Всегда используйте <?php ?> для определения вашего PHP-кода вместо простого использования <? ?>. Это обеспечивает совместимость с Pear и облегчает межплатформенное портирование.
Объявление комментария в заголовке файла:
Для всех файлов PHP-кода, которые необходимо включить в версию ядра pear, необходимо добавить следующий комментарий в начале файла:
/* vim: setexpandtab tabstop=4 Shiftwidth=4: */
// +----------------------------------------------- --- -----------------------+
// | версия PHP 4.0 |
// +----------------------------------------------- --- -----------------------+
// | авторские права (c) 1997, 1998, 1999, 2000, 2001 группа php |
// +----------------------------------------------- --- -----------------------+
// | на этот исходный файл распространяется лицензия PHP версии 2.0, |
// | который входит в состав этого пакета в файле лицензии и |
// | доступно во всемирной паутине по адресу |
// |http://www.php.net/license/2_02.txt |
// | если вы не получили копию лицензии PHP и не можете |
// | получить его через всемирную паутину, отправьте сообщение по адресу |
// |[email protected] чтобы мы могли немедленно отправить вам копию |
// +----------------------------------------------- --- -----------------------+
// | авторы: оригинальный автор |
// | ваше имя |
// +----------------------------------------------- --- -----------------------+
//
// $id$
Для файлов, которые не входят в базу кода ядра pear, рекомендуется также иметь такой же блок комментариев в начале файла с указанием авторских прав, соглашения, автора и т. д. В то же время в первую строку также добавляется модельная строка vim, так что стиль кода Pear можно сохранить в vim.
тег cvs:
Как показано выше, добавьте тег идентификатора CVS к каждому файлу. Если файл, который вы редактируете или изменяете, не имеет этого тега, добавьте его или замените аналогичным выражением в исходном файле (например, «последнее изменение» и т. д.).
образец URL:
Вы можете обратиться к RFC 2606 и использовать « http://www.example.com » во всех примерах URL-адресов.
Постоянное именование:
Константы следует по возможности писать заглавными буквами, а для облегчения понимания используйте символы подчеркивания для разделения каждого слова. В то же время вы должны указать префикс имени пакета или имени класса, в котором находится константа. Например, константы в классе ошибок должны начинаться с bug_. Выше приведены правила кодирования pear. Подробные правила кодирования можно найти в описании файла coding_standard в pear. Чтобы лучше понять эти правила кодирования, вы также можете обратиться к коду существующего модуля Pear Core.
Начните использовать грушу
груша
Использовать грушу легко, вам просто нужно определить свою собственную программу груши следующим образом:
require_once "pear.php";
класс your_class_name расширяет грушу{
Определение вашего класса...
}
Конечно, вам необходимо соблюдать упомянутые ранее правила кодирования Pear, и тогда вы сможете реализовать то, что хотите, внутри своего класса. Далее давайте обсудим это. Фактически, груша предоставляет нам два предопределенных класса:
груша: это базовый класс груши, и все расширения груши должны наследовать и производить от него.
pear_error: базовый класс обработки ошибок Pear. Вы можете создать собственный класс обработки ошибок.
Вообще говоря, вам не следует создавать экземпляр pear напрямую, а самостоятельно создать новый класс, а затем создать экземпляр этого нового класса. В качестве базового класса pear предоставляет нам несколько полезных функций, наиболее важными из которых являются деструкторы и деструкторы обработки ошибок.
PHP поддерживает конструкторы, но не поддерживает деструкторы. Однако PHP предоставляет функцию Register_shutdown_function(), которая может вызывать зарегистрированную функцию до завершения сценария. Поэтому pear использует эту функцию для имитации деструктора. Если у вас есть подкласс mypear, то в классе mypear вы можете определить функцию. Имя функции представляет собой подчеркивание плюс имя вашего класса _mypear(). Эта функция является деструктором этого класса. Однако этот деструктор отличается от деструктора в C++. Он будет выполняться не при удалении объекта, а при завершении скрипта. В конце концов, это всего лишь симуляция. Поскольку используется Register_shutdown_function(), напечатанная информация не будет возвращена браузеру в вашем деструкторе. Кроме того, в вашем конструкторе вам необходимо вызвать конструктор его родительского класса, поскольку PHP не будет автоматически вызывать конструктор родительского класса, а деструктор необходимо зарегистрировать в конструкторе pear. Мы можем посмотреть исходный код pear. код:
<код>
функция груша() {
if (method_exists($this, "_".get_class($this))) {
глобальный $_pear_destructor_object_list;
$_pear_destructor_object_list[] = &$this;
}
если ($this->_debug) {
printf("Вызван конструктор груши, 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. Вот простой пример:
<код>
функция myconnect($host = "localhost", $port = 1080)
{
$fp = fsockopen($host, $port, $errno, $errstr);
если (!is_resource($fp)) {
вернуть новую pear_error($errstr, $errno);
}
вернуть $фп;
}
$sock = myconnect();
если (груша::iserror($sock)) {
напечатайте "ошибка подключения: ".$sock->getmessage()."<br>n"
}
</code>
Как показано в приведенном выше коде, после выполнения фрагмента кода, который может вызвать ошибку, вам нужно использовать iserror pear, чтобы определить, есть ли ошибка, и вы можете использовать getmessage pear_error, чтобы получить последнее сообщение об ошибке. Примечание. Обязательно используйте pear::iserror в ключевых местах.
Используйте рейзеррор
После php4.0.5 у груши появилось еще 2 функции:
seterrorhandling($mode, $options = null)
raiseerror($message = null, $code = null, $mode = null, $options = null, $userinfo = null)
Первый может установить режим обработки ошибок pear по умолчанию, а второй является функцией-оболочкой, которая возвращает объект pear_error, что немного отличается от прямого создания и возврата объекта pear_error. Если вы опустите такие параметры, как $mode и $options, для создания объекта pear_error будут использоваться значения по умолчанию. Вы можете использовать seterrorhandling() для настройки этих значений по умолчанию. .
груша_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: Возвращает дополнительную информацию о пользователе, строка.
строка getdebuginfo: содержимое такое же, как указано выше.
string tostring: возвращает подробное строковое описание текущего объекта, включая режим обработки ошибок, уровень, информацию об ошибке, код ошибки, связанные функции обратного вызова и т. д.
Итак, знакомство с грушей окончено. Подводя итог, если вы хотите сделать наращивание груши, вам нужно сделать следующее:
require_once "pear.php"
Используйте класс your_pear_extend расширяет грушу{}, чтобы определить новый класс.
В конструкторе вашего класса вызовите конструктор родительского класса pear:
функция your_pear_extend{
$this->груша();
...
}
При необходимости определите свой деструктор _your_pear_extend
При необходимости создайте собственный класс обработки ошибок из pear_error, чтобы установить режим обработки ошибок и вызывать ошибки, когда это необходимо.
После выполнения кода, который может генерировать ошибки, используйте pear::iserror($obj) для обнаружения соответствующих ошибок.
Реализуйте свой собственный функционал.
В последней версии ядра pear php4.05 уже есть множество отличных модулей приложений, таких как: phpdoc, кэш, html... Конечно, по сравнению с cpan, pear только начинает работать и нуждается в людях из сообщества php. Благодаря нашим совместным усилиям по его улучшению и усовершенствованию, PHP будет становиться все более и более мощным.
Связанные ресурсы
грушаГлавная страница
Домашняя страница PHP
Домашняя страница phpdoc, которая может генерировать документы API, аналогичные javadoc, из исходного кода вашего приложения pear.
php-режим для xemacs/emacs, обеспечивает поддержку синтаксиса PHP для emacs/xemacs и хорошо поддерживает стиль кода груши.
Домашняя страница vim, очень хороший редактор, также имеет хорошую поддержку php.