What happened with this in the end. I have a case where call_user_function needs to call a class function without me having to instantiate a dummy object first.
Sam > -----Original Message----- > From: Andi Gutmans [mailto:[EMAIL PROTECTED]] > Sent: 26 February 2002 17:13 > To: brad lafountain; [EMAIL PROTECTED] > Subject: Re: [PHP-DEV] call_user_function() > > > Can you send a unified diff of what call_user_function() > would look like > with your changes? > > Andi > > At 06:04 AM 2/25/2002 -0800, brad lafountain wrote: > >Ok, > > I know ive already posted this but no responded. So I'll > do it again. > > > >Currently call_user_function() doesn't call overloaded class methods. > >I hacked together a function to get around this. Does anyone > want to look > >at it > >and see if it's gunna mess anything up as far as zend > execution. if not put it > >in as part as the normal call_user_function. > > > >int my_call_user_function(HashTable *function_table, zval > **object_pp, zval > >*function_name, zval *retval_ptr, int param_count, zval > *params[] TSRMLS_DC) > >{ > > if(call_user_function(function_table, object_pp, > function_name, > > retval_ptr, > >param_count, params TSRMLS_CC) == FAILURE) > > { > > > if(Z_OBJCE_PP(object_pp)->handle_function_call != NULL) > > { > > zend_overloaded_element overloaded_element; > > zend_property_reference property_reference; > > zend_function_state function_state; > > zend_function_state > *original_function_state_ptr; > > int i; > > > > overloaded_element.element = *function_name; > > overloaded_element.type = OE_IS_METHOD; > > > > function_state.function = (zend_function *) > > emalloc(sizeof(zend_function)); > > function_state.function->type = > > ZEND_OVERLOADED_FUNCTION; > > > function_state.function->common.arg_types = NULL; > > > >function_state.function->overloaded_function.function_name = > >Z_STRVAL_P(function_name); > > > > property_reference.object = *object_pp; > > property_reference.type = BP_VAR_NA; > > property_reference.elements_list = > (zend_llist > >*)emalloc(sizeof(zend_llist)); > > > zend_llist_init(property_reference.elements_list, > >sizeof(zend_overloaded_element), NULL, 0); > > > >zend_llist_add_element(property_reference.elements_list, > >&overloaded_element); > > > > //Build argument stack > > for(i = 0;i < param_count;i++) > > > zend_ptr_stack_push(&EG(argument_stack), > > params[i]); > > > zend_ptr_stack_n_push(&EG(argument_stack), 2, > > (void *)param_count, NULL); > > > > EG(function_state_ptr) = &function_state; > > > >Z_OBJCE_PP(object_pp)->handle_function_call(param_count, retval_ptr, > >*object_pp, 1 TSRMLS_CC, &property_reference); > > EG(function_state_ptr) = > original_function_state_ptr; > > > > > zend_llist_destroy(property_reference.elements_list); > > efree(property_reference.elements_list); > > efree(function_state.function); > > > > zend_ptr_stack_clear_multiple(TSRMLS_C); > > return SUCCESS; > > } > > } > >} > > > > > >__________________________________________________ > >Do You Yahoo!? > >Yahoo! Sports - Coverage of the 2002 Olympic Games > >http://sports.yahoo.com > > > >-- > >PHP Development Mailing List <http://www.php.net/> > >To unsubscribe, visit: http://www.php.net/unsub.php > > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php