2012-08-17 48 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