创建一个新的HashTable分为两步:首先是分配zend_array内存,这个可以通过ZVAL_NEW_ARR()宏分配,也可以自己直接分配;然后初始化数组,通过zend_hash_init()宏完成,如果不进行初始化数组将无法使用。
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent) \
_zend_hash_init((ht), (nSize), (pDestructor), (persistent) ZEND_FILE_LINE_CC)
示例:
zval array;
uint32_t size;
ZVAL_NEW_ARR(&array);
zend_hash_init(Z_ARRVAL(array), size, NULL, ZVAL_PTR_DTOR, 0);