天天看點

如何調用php的擴充,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()?

解決方法:

使用提供的宏,調用将是:

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

标簽:c-3,php-extension,php

來源: https://codeday.me/bug/20190730/1580601.html