Zend Hash

出自SurfLib

跳转到: 导航, 搜索

hash表

  • function_table
zval *fname;
zval *retval;
MAKE_STD_ZVAL(fname);
convert_to_string(fname);
Z_STRLEN_P(fname)=8;
Z_STRVAL_P(fname)="get_name";
call_user_function_ex(EG(function_table), NULL, fname, &retval, 0, NULL, 0,NULL TSRMLS_CC);
  • active_symbol_table
  • symbol_table

EG

  • function_state_ptr
  • argument_stack
zval ***args=NULL;
args = (zval ***)safe_emalloc(sizeof(zval **), 1, 0);
args[0] = (zval**)emalloc(sizeof(zval**));
MAKE_STD_ZVAL(*args[0]);
array_init(*args[0]);

void **p = EG(argument_stack).top_element-2;
int arg_count = (int)(zend_uintptr_t) *p;
int i;
for (i=0; i<arg_count; i++) {
    zval *element;

    ALLOC_ZVAL(element);
    *element = **((zval **) (p-(arg_count-i)));
    zval_copy_ctor(element);
    INIT_PZVAL(element);
    zend_hash_next_index_insert((*args[0])->value.ht, &element, sizeof(zval *), NULL);
} 
个人工具
全站导航
广告