Объявление Блока Zend-Функций
| ||||||||||||||||||||||||
|
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_*.
| ||||||
|
Нет комментариев. Ваш будет первым!