php扩展开发

i_bruce 2016-10-05 12:25:00
在模块加载时初始一个全局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();
}
...全文
512 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljsh000 2016-10-21
  • 打赏
  • 举报
回复
建议你看看RETURN_NULL

20,397

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧