Новые книги

Сегодня уже недостаточно просто произвести продукт – нужно грамотно довести его до конечных потребителей. Для того чтобы решить эту задачу, необходима правильно выстроенная модель дистрибуции. Причем в условиях постоянно меняющихся рынков крайне важно быть готовым к тому, что систему придется непрерывно совершенствовать и при этом любой неверный шаг сразу же приведет к снижению продаж, а значит, и прибыли. Эта книга расскажет о том, как разработать и внедрить оптимальную для вашего бизнеса модель дистрибуции и постоянно поддерживать ее в актуальном состоянии, так, чтобы она соответствовала всем вызовам современных отечественных рынков.
Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».

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

Несмотря на то что книга рассчитана в первую очередь на профессиональных разработчиков приложений на Delphi, она окажет несомненную пользу и начинающим программистам, демонстрируя им приемы и трюки, которые столь популярны у истинных «профи». Все коды примеров, упомянутые в книге, доступны для выгрузки на Web-сайте издательства.

Объявление Блока Zend-Функций

Учебник РНР
Назад Глава 32. Исходные Ресурсы. Обсуждение. Вперёд

Объявление блока Zend-функций

Теперь, после объявления экспортируемых функций, вы должны также ввести их в Zend. Введение списка функций выполняется через использование массива zend_function_entry. Этот массив последовательно содержит все функции, которые делаются доступными внешне, с именем функции, как оно должно появляться в PHP, и именем, как оно определено в C-исходнике. Внутренне zend_function_entry определяется так, как показано в Листинге 9.5.

Рисунок 32-2. Листинг 9.5. Внутреннее объявление zend_function_entry.
typedef struct _zend_function_entry {
    char *fname;
    void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
    unsigned char *func_arg_types;
} zend_function_entry;

ВхождениеОписание
fname Обозначает имя функции, как оно видно в PHP (например, fopen, mysql_connect, или, в нашем примере, first_module).
handlerУказатель на C-функцию, отвечающую за обработку вызовов данной функции. Например, см. стандартный макрос INTERNAL_FUNCTION_PARAMETERS, рассмотренный ранее.
func_arg_typesДаёт вам возможность работать с определёнными параметрами, которые форсируются для передачи по ссылке. обычно вы должны установить здесь NULL.

В предыдущем примере объявление выглядит так:

zend_function_entry firstmod_functions[] =
{
    ZEND_FE(first_module, NULL)
    {NULL, NULL, NULL}
};

Видно, что последнее вхождение списка всегда должно быть {NULL, NULL, NULL}. Этот маркёр должен быть установлен, чтобы Zend знала, когда будет достигнут конец списка экспортируемых функций.

Примечание: вы не можете использовать предопределённые макросы как маркёр конца, так как они будут пытаться обратиться к функции по имени "NULL"!

Макрос ZEND_FE просто расширяется во вхождение структуры в zend_function_entry. Заметьте, что эти макросы вводят специальную схему именования в ваши функции - ваши C-функции получат префикс zif_, что означает, что ZEND_FE(first_module) будет ссылаться на C-функцию zif_first_module(). Если вы хотите совместить использование макроса с кодированными вручную вхождениями (это не очень хорошо), запомните это.

Подсказка: ошибки компиляции, которые ссылаются на функции с именами zif_*(), относятся к функциям, определённым с помощью ZEND_FE.

В Таблице 9.2 дан список всех макросов, которые вы можете использовать для определения функций.

Рисунок 32-3. Таблица 9.2. Макросы для определения функций
Имя Макроса Описание
ZEND_FE(name, arg_types) Определяет вхождение функции с именем name вzend_function_entry. Требует соответствующей C-функции.
arg_types
должно быть NULL.
Эта функция использует автоматическую генерацию имени C-функции путём установления префикса zif_ в имени PHP-функции. Например, ZEND_FE("first_module", NULL) вводит функцию first_module() в PHP и связывает её с C-функцией zif_first_module(). Используется в сочетании с ZEND_FUNCTION.
ZEND_NAMED_FE(php_name, name, arg_types)Определяет функцию, которая будет доступна для PHP по имени php_name, и связывает её с соответствующим name C-функции.
arg_types должно быть NULL.
используйте эту функцию, если вам не нужна автоматическая установка префиксов имён, вводимая ZEND_FE. Используется в сочетании с ZEND_NAMED_FUNCTION.
ZEND_FALIAS(name, alias, arg_types)Определяет псевдоним alias для name.
arg_types
должно быть NULL. Не требует соответствующей C-функции; вместо неё ссылается на цель псевдонима.
PHP_FE(name, arg_types)Эквивалент старого PHP API для ZEND_FE.
PHP_NAMED_FE(runtime_name, name, arg_types) Эквивалент старого PHP API для ZEND_NAMED_FE.
Примечание: вы не можете использовать ZEND_FE в сочетании с PHP_FUNCTION, либо PHP_FE в сочетании с ZEND_FUNCTION. Однако абсолютно допустимо смешивать ZEND_FE и ZEND_FUNCTION сPHP_FE и PHP_FUNCTION при наличии того же набора макросов для каждой объявляемой функции. Но смешивание не рекомендуется; вместо этого советуем использовать только макросы ZEND_*.

Назад Оглавление Вперёд
Объявление экспортируемых функций Вверх Объявление блока Zend-модуля