dto*_*och -1 php c php-internals
我正在编写小的php扩展,并在构建它时遇到问题.代码:
PHP_RINIT_FUNCTION(pstat)
{
int argc = ZEND_NUM_ARGS();
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
on make出错了:
.... /ext/pstat/pstat.c:122:31: error: 'ht' undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)
ZEND_NUM_ARGS()是Zend_API.h中的一个宏
#define ZEND_NUM_ARGS() (ht)
Run Code Online (Sandbox Code Playgroud)
但是'什么'是什么?有任何想法吗?
你为什么在这里使用ZEND_NUM_ARGS()?这是请求初始化函数,不会接收任何用户提供的参数.
通常但不总是ht用于表示哈希表.
ZEND_NUM_ARGS()通常在使用PHP_FUNCTION宏定义的函数中使用,以获取从PHP脚本传递给内部函数的参数数量.
如果从PHP_FUNCTION宏中追溯,最终会看到内部函数定义中使用的以下标准参数集.
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC
Run Code Online (Sandbox Code Playgroud)
如您所见,此定义包含ht为int.
参数PHP_RINIT_FUNCTION不包括ht.
#define INIT_FUNC_ARGS int type, int module_number TSRMLS_DC
Run Code Online (Sandbox Code Playgroud)