]> granicus.if.org Git - php/commitdiff
Fixed support for static methods
authorDmitry Stogov <dmitry@php.net>
Fri, 25 Jul 2008 09:48:36 +0000 (09:48 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 25 Jul 2008 09:48:36 +0000 (09:48 +0000)
ext/pdo/pdo_stmt.c
ext/reflection/php_reflection.c

index 897775f0e5501d8d902c067772a1fba4c28aed52..8d79061138539724bf4de12889ee0cc6218cc085 100755 (executable)
@@ -850,7 +850,7 @@ static int make_callable_ex(pdo_stmt_t *stmt, zval *callable, zend_fcall_info *
        fcc->initialized = 1;
        fcc->function_handler = function_handler;
        fcc->calling_scope = EG(scope);
-       fcc->called_scope = Z_OBJCE_PP(object);
+       fcc->called_scope = object ? Z_OBJCE_PP(object) : NULL;
        fcc->object_pp = object;
        
        return 1;
index 170585a84101a186c9c9db89f4946db75091d5b1..d38fe6602494a716ceb0f74be37cb79f64032cb5 100644 (file)
@@ -2434,7 +2434,7 @@ ZEND_METHOD(reflection_method, invoke)
         */
        if (mptr->common.fn_flags & ZEND_ACC_STATIC) {
                object_pp = NULL;
-               obj_ce = NULL;
+               obj_ce = mptr->common.scope;
        } else {
                if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) {
                        efree(params);
@@ -2465,7 +2465,7 @@ ZEND_METHOD(reflection_method, invoke)
        fcc.initialized = 1;
        fcc.function_handler = mptr;
        fcc.calling_scope = obj_ce;
-       fcc.called_scope = Z_OBJCE_PP(object_pp);
+       fcc.called_scope = obj_ce;
        fcc.object_pp = object_pp;
 
        result = zend_call_function(&fci, &fcc TSRMLS_CC);
@@ -2538,7 +2538,7 @@ ZEND_METHOD(reflection_method, invokeArgs)
         */
        if (mptr->common.fn_flags & ZEND_ACC_STATIC) {
                object = NULL;
-               obj_ce = NULL;
+               obj_ce = mptr->common.scope;
        } else {
                if (!object) {
                        efree(params);
@@ -2570,8 +2570,8 @@ ZEND_METHOD(reflection_method, invokeArgs)
        fcc.initialized = 1;
        fcc.function_handler = mptr;
        fcc.calling_scope = obj_ce;
-       fcc.called_scope = Z_OBJCE_P(object);
-       fcc.object_pp = &object;
+       fcc.called_scope = obj_ce;
+       fcc.object_pp = object ? &object : NULL;
 
        result = zend_call_function(&fci, &fcc TSRMLS_CC);