П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3510 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6112 раз(а).

Учебник HTML.
Просмотров 3268 раз(а).

Руководство по PHP5.
Просмотров 5489 раз(а).

Хостинг через призму DNS.
Просмотров 4127 раз(а).

Подборка текстов стандартных документов.
Просмотров 55766 раз(а).

Учебник PHP - Самоучитель
Просмотров 3082 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5599 раз(а).

Внешние атаки...
Просмотров 3834 раз(а).

Учебник PHP.
Просмотров 2820 раз(а).

SSI в примерах.
Просмотров 37457 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





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

Объявление экспортируемых функций

Для объявления функций, которые экспортируются (т.е. делаются доступными в PHP как новые внешние функции), Zend предоставляет набор макросов. Сэмпл объявления выглядит примерно так:
ZEND_FUNCTION(my_function);

ZEND_FUNCTION объявляет новую C-функцию, которая работает с внутренним API Zend'а. Это означает, что функция имеет тип void и принимает в качестве параметров INTERNAL_FUNCTION_PARAMETERS (другой макрос). В дополнение к этому, к имени функции делается префикс zif. Расширенная версия ранее сделанного определения будет выглядеть так:
void zif_my_function(INTERNAL_FUNCTION_PARAMETERS);

Расширение INTERNAL_FUNCTION_PARAMETERS даст:

void zif_my_function(int ht, zval *return_value, zval *this_ptr,
int return_value_used, zend_executor_globals *executor_globals);

Поскольку интерпретатор и ядро исполнителя отделены от главного пакета PHP, привлекается второй API, определяющий наборы макросов и функций: Zend API. Поскольку Zend API сейчас выполняет сравнительно мало работы, которую раньше делал PHP, многие функции PHP были уменьшены до псевдонимов для вызова в Zend API. Рекомендуем использовать Zend API везде, где это возможно, так как старый API сохранён только для обеспечения обратной совместимости. Например, типы zval и pval идентичны. zval это определение Zend'а; pval это определение PHP (в действительности pval это, в настоящее время, псевдоним zval). Так как макрос INTERNAL_FUNCTION_PARAMETERS это Zend-макрос, вышеприведённое определение содержит zval. При написании кода вы всегда должны использовать zval для обеспечения соответствия новому Zend API.

Список параметров этого объявления очень важен; вы должны их запомнить (см. Таблицу 9.1).

Рисунок 32-1. Таблица 9.1. Zend-параметры функций, вызываемых из PHP
Параметр Описание
htКоличество параметров, передаваемых в Zend-функцию. Вы не должны напрямую воздействовать на этот параметр; используйте ZEND_NUM_ARGS() для получения этого значения.
return_valueЭта переменная используется для передачи и возвращения значений вашей функции обратно в PHP. Доступ к этой переменной лучше выполнять с помощью предопределённых макросов. См. далее их описание.
this_ptrИспользуя эту переменную, вы можете получить доступ к объекту, в котором содержится ваша функция, если она используется внутри объекта. Используйте функцию getThis() для получения этого указателя.
return_value_usedЭтот флаг указывает, будет ли return-значение этой функции действительно использоваться вызывающим скриптом. 0 указывает, что return-значение не используется; 1 указывает, что вызывающий ожидает return-значение. Вычисление этого флага может быть сделано для проверки корректности использования функции и для оптимизации скорости, если возвращение значения требует затратных операций (например, см., как array.c использует это).
executor_globalsЭта переменная указывает на глобальные установки Zend-машины. Вам это может потребоваться, например, при создании новых переменных (подробнее об это чуть дальше). Глобалы исполнителя также могут вводиться в вашу функцию путём использования макроса ELS_FETCH().

Назад Оглавление Вперёд
Включения Header-файлов Вверх Объявление блока Zend-функции


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru