uznay-chto-hochesh.narod.ru

-сайт для интересующихся людей

Учебник - справочник по PHP.

Здесь Вы найдете что хотели

Меню сайта
Главная
Введение
Справочник языка
Возможности РНР
Функции (справочник)
Расширение РНР 4.0
F.A.Q. частые вопросы
Приложения
Алфавитный указатель
Друзья сайта
сделай сайт сам! пособие по html
изучение html и web-дизайна для новичков
Бесплатная отправка смс на все операторы
Реклама
 
НазадГлава 32. Исходные Ресурсы. Обсуждение. Вперёд

Объявление блока Zend-модуля

Этот блок хранится в структуре zend_module_entry и содержит всю информацию, необходимую для описания содержимого этого модуля для Zend. Вы можете просмотреть внутреннее определение этого модуля в Листинге 9.6.

Рисунок 32-4. Внутреннее объявление zend_module_entry.
typedef struct _zend_module_entry zend_module_entry;

struct _zend_module_entry {
    unsigned short size;
    unsigned int zend_api;
    unsigned char zend_debug;
    unsigned char zts;
    char *name;
    zend_function_entry *functions;
    int (*module_startup_func)(INIT_FUNC_ARGS);
    int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);
    int (*request_startup_func)(INIT_FUNC_ARGS);
    int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
    void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
    char *version;
    int (*global_startup_func)(void);
    int (*global_shutdown_func)(void);

[ Остальная часть этой структуры здесь не представляет интереса ]

};

Вхождение Описание
size, zend_api, zend_debug и ztsОбычно заполняется "STANDARD_MODULE_HEADER"'ом, который заполняет эти четыре члена размером всего zend_module_entry, ZEND_MODULE_API_NO, тем, построение это для отладки или нормальное (ZEND_DEBUG), и включён ли ZTS (USING_ZTS).
name Содержит имя модуля (например, "File functions", "Socket functions", "Crypt", etc.). Это имя показывается в phpinfo() в разделе "Additional Modules/Дополнительные Модули".
functions Указывает на блок Zend-функции, обсуждённый в предыдущем разделе.
module_startup_funcЭта функция вызывается один раз при инициализации модуля и может использоваться для выполнения предшествующих шагов инициализации (таких как начальное выделение памяти и т.п.). Для указания на неудачу в ходе инициализации возвращается FAILURE; иначе - SUCCESS. Для маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_MINIT.
module_shutdown_funcЭта функция вызывается один раз при выключения/shutdown модуля и может использоваться для выполнения предшествующих шагов деинициализации (таких как высвобождение памяти). Это пара к module_startup_func(). Для указания на неудачу в ходе инициализации возвращается FAILURE; иначе - SUCCESS. Для маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_MSHUTDOWN.
request_startup_funcЭта функция вызывается при каждом запросе страницы и может использоваться для выполнения предшествующих шагов инициализации, необходимых для обработки запроса. Для указания на неудачу здесь возвращается FAILURE; иначе - SUCCESS. Примечание: Поскольку динамически загружаемые модули загружаются только при запросе страниц, функция старта запроса вызывается сразу после функции старта модуля/module startup (оба события инициализации возникают одновременно). Для маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_RINIT.
request_shutdown_funcЭта функция вызывается один раз после каждого запроса страницы и работает как парная функция для request_startup_func(). Для указания на неудачу здесь возвращается FAILURE; иначе - SUCCESS. Примечание: Поскольку динамически загружаемые модули загружаются только при запросе страниц, после запроса shutdown-функции сразу идёт вызов обработчика отключения модуля (оба события деинициализации возникают одновременно). Для маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_RSHUTDOWN.
info_funcЕсли phpinfo() вызывается в скрипте, Zend циклически проходит по всем загружаемым модулям и вызывает эту функцию. Затем каждый модуль имеет шанс оставить свой собственный "отпечаток" на странице вывода. Обычно это используется для дампа/dump информации окружения или статической информации. Для маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_MINFO.
versionВерсия модуля. Вы можете использовать NO_VERSION_YET, если пока не хотите задать номер версии модуля, но мы рекомендуем добавлять здесь строку версии. Такая строка может выглядеть примерно так (в хронологическом порядке): "2.5-dev", "2.5RC1", "2.5" или "2.5pl3".
global_startup_funcФункции глобального старта используются редко. Вы обычно должны пропускать оставшуюся часть этой структуры, размещая макрос STANDARD_MODULE_PROPERTIES. Для маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_GINIT.
global_shutdown_funcДля маркировки этого поля как неиспользуемого/unused применяйте NULL. Для объявления функции используйте макрос ZEND_GSHUTDOWN.
Остальные элементы структурыОни используются внутренне и могут быть заполнены с помощью макроса STANDARD_MODULE_PROPERTIES_EX. Вы не должны присваивать им какие-либо значения. Используйте STANDARD_MODULE_PROPERTIES_EX только тогда, когда используете startup и shutdown-функции; иначе используйте непосредственно STANDARD_MODULE_PROPERTIES.

В нашем примере эта структура реализуется так:
zend_module_entry firstmod_module_entry =
{
    STANDARD_MODULE_HEADER,
    "First Module",
    firstmod_functions,
    NULL, NULL, NULL, NULL, NULL,
    NO_VERSION_YET,
    STANDARD_MODULE_PROPERTIES,
};

В своей основе это простейший и минимальный набор значений, который вы можете использовать. Имя модуля устанавливается в First Module, затем делается ссылка на список функций, после чего все startup и shutdown-функции маркируются как неиспользуемые.

Для справочных целей вы можете найти список макросов, участвующих в объявлении startup и shutdown-функций, в Таблице 9.3. Они пока не используются в нашем базовом примере, но будут продемонстрированы позднее. Вы должны использовать эти макросы для объявления ваших startup и shutdown-функций, так как они требуют передачи специальных аргументов (INIT_FUNC_ARGS и SHUTDOWN_FUNC_ARGS), которые автоматически включаются в объявление функции, когда используются с предопределёнными макросами. Если вы объявляете вашу функцию самостоятельно, а PHP-разработчики решат, что необходимо изменение списка аргументов, вы должны будете изменить исходный код ваших модулей, чтобы обеспечить совместимость.

Таблица 32-5. Макросы для объявления Startup и Shutdown-функций
МакросОписание
ZEND_MINIT(module)Объявление функции для старта модуля. Генерируемое имя будет zend_minit_<module> (например, zend_minit_first_module). Используется в сочетании с ZEND_MINIT_FUNCTION.
ZEND_MSHUTDOWN(module) Объявление функции для отключения модуля. Генерируемое имя будет zend_mshutdown_<module> (например, zend_mshutdown_first_module). Используется в сочетании с ZEND_MSHUTDOWN_FUNCTION.
ZEND_RINIT(module) Объявляет функцию для старта запроса. Генерируемое имя будет zend_rinit_<module> (например, zend_rinit_first_module ). Используется в сочетании с ZEND_RINIT_FUNCTION.
ZEND_RSHUTDOWN(module)Объявляет функцию для отключения запроса. Генерируемое имя будет zend_rshutdown_<module> (например, zend_rshutdown_first_module). Используется в сочетании с ZEND_RSHUTDOWN_FUNCTION.
ZEND_GINIT(module) Объявляет функцию для глобального старта. Генерируемое имя будет zend_ginit_<module> (например, zend_ginit_first_module). Используется в сочетании с ZEND_GINIT_FUNCTION.
ZEND_GSHUTDOWN(module)Объявляет функцию для глобального выключения. Генерируемое имя будет zend_gshutdown_<module> (например, zend_gshutdown_first_module). Используется в сочетании с ZEND_GSHUTDOWN_FUNCTION.
ZEND_MINFO(module)Объявляет функцию для печати информации модуля, используемой при вызове phpinfo(). Генерируемое имя будет zend_info_<module> (например, zend_info_first_module). Используется в сочетании с ZEND_MINFO_FUNCTION.
Назад Оглавление Вперёд
Объявление блока Zend-функций Вверх Создание get_module()

Хостинг от uCoz