php扩展开发

i_bruce i_bruce 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在模块加载时初始一个全局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();
}
...全文
评论 1
收藏 已收藏
分享
返回顶部
i_bruce
PHP 20,393 成员 19,654 内容