-1

我正在编写小型 php 扩展并且在构建它时遇到问题。编码:

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

在 make 上出现错误:

.... /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'?有任何想法吗?

4

1 回答 1

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

如您所见,此定义包括htint。

的参数PHP_RINIT_FUNCTION不包括ht

#define INIT_FUNC_ARGS      int type, int module_number TSRMLS_DC
于 2012-08-17T12:35:39.827 回答