2012-08-17 50 views
-1

我正在写小php扩展,并在构建它时遇到问题。 代码:由于ZEND_NUM_ARGS()宏导致无法构建扩展

PHP_RINIT_FUNCTION(pstat) 
{ 
    int argc = ZEND_NUM_ARGS(); 
    return SUCCESS; 
} 

化妆上得到一个错误:

.... /ext/pstat/pstat.c:122:31: error: 'ht' undeclared (first use in this function) 

ZEND_NUM_ARGS()是在Zend_API.h

#define ZEND_NUM_ARGS()  (ht) 

一个宏,但什么是 'HT'?有任何想法吗?

回答

7

你为什么在这里使用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 

如您所见,此定义包括ht作为int。

PHP_RINIT_FUNCTION的参数不包括ht

#define INIT_FUNC_ARGS  int type, int module_number TSRMLS_DC 
+0

我想保存每个请求的开始时间到php。我虽然PHP_RINIT_FUNCTION是一个好主意。 – dtoch 2012-08-17 12:42:53

+0

好的,那么你需要什么'ZEND_NUM_ARGS'? – Leigh 2012-08-17 12:43:25

+0

我虽然有一些要求的参数。例如脚本名称。现在我明白它是我的游戏的错误地方。 – dtoch 2012-08-17 13:03:46