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

index edaa31e30f1029bcbb260ad03b88d385b0a8b580..38d2947944971931faf3fccca630c56d20c4e8e4 100755 (executable)
@@ -860,7 +860,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 c8c4b084e04c224a7da764fd2d37132dbc311fb2..44b81cd1c364d8c38cdb66ad018125cb39c30408 100644 (file)
@@ -2382,7 +2382,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);
@@ -2416,7 +2416,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);
@@ -2491,7 +2491,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);
@@ -2523,8 +2523,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);