Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP extensions - call your own PHP function from another PHP function

Let's say we have a custom PHP extension like:

PHP_RSHUTDOWN_FUNCTION(myextension)
{
   // How do I call myfunction() from here?
   return SUCCESS;
}
PHP_FUNCTION(myfunction)
{
   // Do something here
   ...
   RETURN_NULL;
}

How can I call myfunction() from the RSHUTDOWN handler?

like image 604
m1tk4 Avatar asked Aug 18 '26 12:08

m1tk4


2 Answers

Using the provided macros the call will be:

PHP_RSHUTDOWN_FUNCTION(myextension)
{
   ZEND_FN(myFunction)(0, NULL, NULL, NULL, 0 TSRMLS_CC);
   return SUCCESS;
}

When you're defining you function as PHP_FUNCTION(myFunction) the preprocessor will expand you're definition to:

ZEND_FN(myFunction)(INTERNAL_FUNCTION_PARAMETERS)

which in turn is:

zif_myFunction(int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC)

The macros from zend.h and php.h:

#define PHP_FUNCTION            ZEND_FUNCTION
#define ZEND_FUNCTION(name)         ZEND_NAMED_FUNCTION(ZEND_FN(name))
#define ZEND_FN(name)                       zif_##name
#define ZEND_NAMED_FUNCTION(name)       void name(INTERNAL_FUNCTION_PARAMETERS)
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, return_value_ptr, this_ptr, return_value_used TSRMLS_CC
like image 107
catalin.costache Avatar answered Aug 21 '26 04:08

catalin.costache


Why dont you make the PHP_FUNCTION a stub like so:

void doStuff()
{
  // Do something here
  ...
}

PHP_RSHUTDOWN_FUNCTION(myextension)
{
   doStuff();
   return SUCCESS;
}
PHP_FUNCTION(myfunction)
{
   doStuff();
   RETURN_NULL;
}
like image 30
Geoffrey Avatar answered Aug 21 '26 03:08

Geoffrey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!