helly           Sat Jun 24 18:55:15 2006 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/ext/reflection     php_reflection.c 
  Log:
  - MFH Fix ReflectionObject::getProperties() + dyn properties
  
http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.164.2.33.2.7&r2=1.164.2.33.2.8&diff_format=u
Index: php-src/ext/reflection/php_reflection.c
diff -u php-src/ext/reflection/php_reflection.c:1.164.2.33.2.7 
php-src/ext/reflection/php_reflection.c:1.164.2.33.2.8
--- php-src/ext/reflection/php_reflection.c:1.164.2.33.2.7      Sat Jun 10 
00:40:56 2006
+++ php-src/ext/reflection/php_reflection.c     Sat Jun 24 18:55:15 2006
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_reflection.c,v 1.164.2.33.2.7 2006/06/10 00:40:56 bjori Exp $ */
+/* $Id: php_reflection.c,v 1.164.2.33.2.8 2006/06/24 18:55:15 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -3078,6 +3078,28 @@
 }
 /* }}} */
 
+/* {{{ _adddynproperty */
+static int _adddynproperty(zval **pptr, int num_args, va_list args, 
zend_hash_key *hash_key)
+{
+       zval *property;
+       zend_class_entry *ce = *va_arg(args, zend_class_entry**);
+       zval *retval = va_arg(args, zval*), member;
+       TSRMLS_FETCH();
+
+       if (hash_key->arKey[0] == '\0') {
+               return 0; /* non public cannot be dynamic */
+       }
+
+       ZVAL_STRINGL(&member, hash_key->arKey, hash_key->nKeyLength-1, 0);
+       if (zend_get_property_info(ce, &member, 1 TSRMLS_CC) == 
&EG(std_property_info)) {
+               ALLOC_ZVAL(property);
+               reflection_property_factory(ce, &EG(std_property_info), 
property TSRMLS_CC);
+               add_next_index_zval(retval, property);
+       }
+       return 0;
+}
+/* }}} */
+
 /* {{{ proto public ReflectionProperty[] ReflectionClass::getProperties()
    Returns an array of this class' properties */
 ZEND_METHOD(reflection_class, getProperties)
@@ -3101,6 +3123,11 @@
 
        array_init(return_value);
        zend_hash_apply_with_arguments(&ce->properties_info, 
(apply_func_args_t) _addproperty, 3, &ce, return_value, filter);
+
+       if (intern->obj && (filter & ZEND_ACC_PUBLIC) != 0 && 
Z_OBJ_HT_P(intern->obj)->get_properties) {
+               HashTable *properties = 
Z_OBJ_HT_P(intern->obj)->get_properties(intern->obj TSRMLS_CC);
+               zend_hash_apply_with_arguments(properties, (apply_func_args_t) 
_adddynproperty, 2, &ce, return_value);
+       }
 }
 /* }}} */
 
@@ -4713,7 +4740,7 @@
        php_info_print_table_start();
        php_info_print_table_header(2, "Reflection", "enabled");
 
-       php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 
1.164.2.33.2.7 2006/06/10 00:40:56 bjori Exp $");
+       php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 
1.164.2.33.2.8 2006/06/24 18:55:15 helly Exp $");
 
        php_info_print_table_end();
 } /* }}} */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to