Новые книги

Master Android from first principles and begin the journey toward your own successful Android applications!

Dear Reader,

First, welcome to the world of Android! We’re entering a new era of mobile application development, one marked by open platforms and open source, to take ‘walled gardens’ and make them green houses for any and all to participate in. Android is relatively easy for developers, and I believe that this innovation will help generate a large ecosystem of developers and consumers within a very short time. This means that budding developers such as yourself will have many opportunities to design and build your own applications and you’ll have a huge and hungry customer base.

Second, welcome to the book! Its purpose is to start you on your way with building Android applications, and to help you master the learning curve. Android is already a rich framework, comparable in many ways to the richness Android of desktop Java environments. This means that there is a lot of cool stuff for you to pick up along your journey in order to create the slickest, most useful apps Android you can imagine.

The source code for the code samples in this book is all available from the Apress site, so you can stay as hands-on and practical as you like while I introduce you to the core of Android, and invite you to experiment with the various classes and APIs we’ll be looking at. By the time you’ve finished this book, you’ll be creating your own Android applications and asking yourself what your next great application will be…!

Enjoy!

Mark Murphy
«Бизнес-копирайтинг» – четвертая книга Дениса Каплунова, одного из самых ярких и успешных современных копирайтеров. Из этой книги вы узнаете всё необходимое, чтобы привлечь внимание читателя к своим текстам, убедить его в своей правоте, показать выгоды, снять возражения и добиться желаемого эффекта. Это книга о том, как стать серьезным автором, пишущим для серьезных людей и способным добиваться серьезных результатов.

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

Учебник РНР
НазадГлава 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()