在模块加载时初始一个全局box HashTable数组, 然后定义一个方法获取这个值,但返回为空有空帮忙看看
PHP_MINIT_FUNCTION(xy)
{
/* If you have INI entries, uncomment these lines
REGISTER_INI_ENTRIES();
*/
HashTable *ht;
zval val;
zval result; (box) = (HashTable *)pemalloc(sizeof(HashTable), 64);
if ((box) == NULL) {
zend_error(E_ERROR, "Cannot allocate persistent HashTable ?");
}
zend_hash_init(box, 8, NULL, NULL, 1);
GC_FLAGS(box) |= IS_ARRAY_IMMUTABLE; (ht) = (HashTable *)pemalloc(sizeof(HashTable), 32);
if ((ht) == NULL) {
zend_error(E_ERROR, "Cannot allocate persistent HashTable ?");
}
zend_hash_init(ht, 4, NULL, NULL, 1);
GC_FLAGS(ht) |= IS_ARRAY_IMMUTABLE; zend_string *k = xy_str_persistent("ab", 3);
ZVAL_STRING(&val, "1234");
zend_hash_add(ht, k, &val); ZVAL_ARR(&result, ht);
Z_ADDREF_P(&result);
Z_TYPE_FLAGS_P(&result) = IS_TYPE_IMMUTABLE;
zend_hash_update(box, xy_str_persistent("test", 5), &result);
return SUCCESS;
}PHP_FUNCTION(my_arr)
{
zend_string *name;
zval *pzval;
HashTable *target = box; if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &name) == FAILURE) {
return;
}
//zend_string *k = xy_str_persistent("test", 5);
pzval = zend_symtable_find(target, name);
if (pzval)
{
ZVAL_COPY_VALUE(return_value, pzval);
} RETURN_NULL();
}
PHP_MINIT_FUNCTION(xy)
{
/* If you have INI entries, uncomment these lines
REGISTER_INI_ENTRIES();
*/
HashTable *ht;
zval val;
zval result; (box) = (HashTable *)pemalloc(sizeof(HashTable), 64);
if ((box) == NULL) {
zend_error(E_ERROR, "Cannot allocate persistent HashTable ?");
}
zend_hash_init(box, 8, NULL, NULL, 1);
GC_FLAGS(box) |= IS_ARRAY_IMMUTABLE; (ht) = (HashTable *)pemalloc(sizeof(HashTable), 32);
if ((ht) == NULL) {
zend_error(E_ERROR, "Cannot allocate persistent HashTable ?");
}
zend_hash_init(ht, 4, NULL, NULL, 1);
GC_FLAGS(ht) |= IS_ARRAY_IMMUTABLE; zend_string *k = xy_str_persistent("ab", 3);
ZVAL_STRING(&val, "1234");
zend_hash_add(ht, k, &val); ZVAL_ARR(&result, ht);
Z_ADDREF_P(&result);
Z_TYPE_FLAGS_P(&result) = IS_TYPE_IMMUTABLE;
zend_hash_update(box, xy_str_persistent("test", 5), &result);
return SUCCESS;
}PHP_FUNCTION(my_arr)
{
zend_string *name;
zval *pzval;
HashTable *target = box; if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &name) == FAILURE) {
return;
}
//zend_string *k = xy_str_persistent("test", 5);
pzval = zend_symtable_find(target, name);
if (pzval)
{
ZVAL_COPY_VALUE(return_value, pzval);
} RETURN_NULL();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货