2010-12-03 69 views
2

调用自己的PHP函数比方说,我们有一个自定义PHP扩展,如:PHP扩展 - 从另一个PHP函数

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

我如何可以调用从RSHUTDOWN处理器MyFunction的()?

+0

你想要执行? – 2010-12-03 14:54:21

回答

5

使用所提供的宏调用将是:

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

当你确定你作为PHP_FUNCTION(myFunction)预处理程序展开你的定义为:

ZEND_FN(myFunction)(INTERNAL_FUNCTION_PARAMETERS) 

然后是:

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

从zend.h和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 
2

你为什么不使PHP_FUNCTION存根像这样:

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

PHP_RSHUTDOWN_FUNCTION(myextension) 
{ 
    doStuff(); 
    return SUCCESS; 
} 
PHP_FUNCTION(myfunction) 
{ 
    doStuff(); 
    RETURN_NULL; 
}