出自SurfLib
hash表
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);
}