php ext, макрос PHP_FUNCTION, вызов функции по аналогии из php?

iamFake

Mind Of Liberty
php ext, макрос PHP_FUNCTION, вызов функции по аналогии из php?

Здравствуйте.

В экстеншене объявлена функция через макрос PHP_FUNCTION, как ее можно вызвать по аналогии как из php скрипта? не могу найти документацию где это описано. прямой ее вызов меня стопорит из за INTERNAL_FUNCTION_PARAMETERS макроса =)
 

Santiago

Новичок
Можно использовать call_user_function или call_user_function_ex

int call_user_function(HashTable *function_table, zval **object_pp,
zval *function_name, zval *retval_ptr,
zend_uint param_count, zval *params[] TSRMLS_DC);

Calls a userspace or internal function by its userspace name. The function's return value will be either copied into retval_ptr or referenced into retval_ptr_ptr. Returns SUCCESS or FAILURE.

function_table: Default function table to look for the named function in. Typically this will be EG(function_table).

object_pp: Object instance or classname to perform a method call.

function_name: Universal callback value. Either String or Array as described for zend_is_callable().

retval_ptr(_ptr): Populated with the result of the called function.

param_count: Number of parameters to expect in the params vector.

params: Vector of param_count elements of single or double dereferenced zvals.
 

tony2001

TeaM PHPClub
...но непонятно зачем это делать, если можно просто тело этой функции вынести в отдельную С-функцию и вызывать её в двух местах.
 

iamFake

Mind Of Liberty
Автор оригинала: tony2001
...но непонятно зачем это делать, если можно просто тело этой функции вынести в отдельную С-функцию и вызывать её в двух местах.
иметь возможность в одном экстеншене использовать функции другого, в том числе и функции самого php (standard extension etc), или я не в ту сторону иду?
 

Santiago

Новичок
Из текста вопроса показалось, что нужно вызывать php-функцию из того же экстеншена. Тогда проще сделать, как tony2001 написал.
Иначе можно использовать call_user_function*
 

iamFake

Mind Of Liberty
Автор оригинала: Santiago
Из текста вопроса показалось, что нужно вызывать php-функцию из того же экстеншена. Тогда проще сделать, как tony2001 написал.
Иначе можно использовать call_user_function*
это одна из ситуаций применительно к которой был задан вопрос. т.е. и внутри экстеншена вызов и вызов функций из других экстеншенов. с С функцией понятно, спасибо, а вот функции самого php (например substr или mb_substr), которые объявлены полностью посредством макроса, получается вызывать через call_user_function как я понимаю?
 
Сверху