Hello,

Regarding the question about how to know if a method is declared static
or not, I add the fn_flags to the result (flags property) of
getMethod();. I tested it with PHP userland classes but not internal
objects. This new property reflects the internal fn_flags in
zend_function struct. The constants required are already available so
it's easy to get the method type.

If I missed some other reflection methods which already provide this
info, please point me to them :)

hth

pierre
Index: zend_reflection_api.c
===================================================================
RCS file: /repository/ZendEngine2/zend_reflection_api.c,v
retrieving revision 1.87
diff -u -u -p -r1.87 zend_reflection_api.c
--- zend_reflection_api.c       12 Feb 2004 10:38:14 -0000      1.87
+++ zend_reflection_api.c       19 Feb 2004 14:46:44 -0000
@@ -741,17 +741,21 @@ static void reflection_method_factory(ze
        reflection_object *intern;
        zval *name;
        zval *classname;
+       zval *fn_flags;
 
        MAKE_STD_ZVAL(name);
        ZVAL_STRING(name, method->common.function_name, 1);
        MAKE_STD_ZVAL(classname);
        ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+       MAKE_STD_ZVAL(fn_flags);
+       ZVAL_LONG(fn_flags, method->common.fn_flags);
        reflection_instanciate(reflection_method_ptr, object TSRMLS_CC);
        intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
        intern->ptr = method;
        intern->free_ptr = 0;
        zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, 
sizeof(zval *), NULL);
        zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) 
&classname, sizeof(zval *), NULL);
+       zend_hash_update(Z_OBJPROP_P(object), "flags", sizeof("flags"), (void **) 
&fn_flags, sizeof(zval *), NULL);
 }
 /* }}} */
 

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to