From: Zeev Suraski Date: Sat, 3 Jun 2000 03:28:08 +0000 (+0000) Subject: Improve call_user_function() to support array($obj, $method) X-Git-Tag: PRE_EIGHT_BYTE_ALLOC_PATCH~132 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a35a6bafc6b009b41ed090116566907c8d038e8;p=php Improve call_user_function() to support array($obj, $method) --- diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 21ee9c40c0..9fa150fa5f 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -360,12 +360,30 @@ int call_user_function_ex(HashTable *function_table, zval *object, zval *functio *retval_ptr_ptr = NULL; + if (function_name->type==IS_ARRAY) { /* assume array($obj, $name) couple */ + zval **tmp_object_ptr, **tmp_real_function_name; + + if (zend_hash_index_find(function_name->value.ht, 0, (void **) &tmp_object_ptr)==FAILURE) { + return FAILURE; + } + if (zend_hash_index_find(function_name->value.ht, 1, (void **) &tmp_real_function_name)==FAILURE) { + return FAILURE; + } + function_name = *tmp_real_function_name; + object = *tmp_object_ptr; + } + if (object) { if (object->type != IS_OBJECT) { return FAILURE; } function_table = &object->value.obj.ce->function_table; } + + if (function_name->type!=IS_STRING) { + return FAILURE; + } + original_function_state_ptr = EG(function_state_ptr); zend_str_tolower(function_name->value.str.val, function_name->value.str.len); if (zend_hash_find(function_table, function_name->value.str.val, function_name->value.str.len+1, (void **) &function_state.function)==FAILURE) {