From: Marcus Boerger Date: Tue, 1 Mar 2005 23:41:49 +0000 (+0000) Subject: - Support statuc methods/functions X-Git-Tag: RELEASE_0_3~107 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0b3ed59fb6f231d4d6f4ea947450659c93350afe;p=php - Support statuc methods/functions --- diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 75b6a2c26c..cb79742ad3 100755 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -36,6 +36,7 @@ ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend zend_fcall_info fci; zval z_fname; zval *retval; + HashTable *function_table; zval **params[2]; @@ -62,12 +63,17 @@ ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend fcic.initialized = 1; if (!obj_ce) { - obj_ce = Z_OBJCE_PP(object_pp); + obj_ce = object_pp ? Z_OBJCE_PP(object_pp) : NULL; + } + if (obj_ce) { + function_table = &obj_ce->function_table; + } else { + function_table = EG(function_table); } if (!fn_proxy || !*fn_proxy) { - if (zend_hash_find(&obj_ce->function_table, function_name, function_name_len+1, (void **) &fcic.function_handler) == FAILURE) { + if (zend_hash_find(function_table, function_name, function_name_len+1, (void **) &fcic.function_handler) == FAILURE) { /* error at c-level */ - zend_error(E_CORE_ERROR, "Couldn't find implementation for method %s::%s", obj_ce->name, function_name); + zend_error(E_CORE_ERROR, "Couldn't find implementation for method %s%s%s", obj_ce ? obj_ce->name : "", obj_ce ? "::" : "", function_name); } if (fn_proxy) { *fn_proxy = fcic.function_handler; @@ -82,9 +88,9 @@ ZEND_API zval* zend_call_method(zval **object_pp, zend_class_entry *obj_ce, zend if (result == FAILURE) { /* error at c-level */ if (!obj_ce) { - obj_ce = Z_OBJCE_PP(object_pp); + obj_ce = object_pp ? Z_OBJCE_PP(object_pp) : NULL; } - zend_error(E_CORE_ERROR, "Couldn't execute method %s::%s", obj_ce->name, function_name); + zend_error(E_CORE_ERROR, "Couldn't execute method %s%s%s", obj_ce ? obj_ce->name : "", obj_ce ? "::" : "", function_name); } if (!retval_ptr_ptr) { if (retval) {