]> granicus.if.org Git - php/commitdiff
- Fixed ReflectionClass::getStaticProperties() to do not return the private propertie...
authorFelipe Pena <felipe@php.net>
Sat, 1 Aug 2009 20:44:00 +0000 (20:44 +0000)
committerFelipe Pena <felipe@php.net>
Sat, 1 Aug 2009 20:44:00 +0000 (20:44 +0000)
  behavior already adopted in ReflectionClass::getDefaultProperties() and ReflectionClass::getProperties().

ext/reflection/php_reflection.c
ext/reflection/tests/ReflectionClass_getDefaultProperties_001.phpt
ext/reflection/tests/ReflectionClass_setStaticPropertyValue_001.phpt
ext/reflection/tests/bug49074.phpt

index 8999c199943599f18a008afcd08a36d9bbf28b32..7dfc0c86ea0117957087d616d1a6f5f20ca74d5c 100644 (file)
@@ -3060,13 +3060,16 @@ ZEND_METHOD(reflection_class, getStaticProperties)
 
                        zend_unmangle_property_name(key, key_len-1, &class_name, &prop_name);
 
-                       /* copy: enforce read only access */
-                       ALLOC_ZVAL(prop_copy);
-                       *prop_copy = **value;
-                       zval_copy_ctor(prop_copy);
-                       INIT_PZVAL(prop_copy);
+                       /* filter privates from base classes */
+                       if (!(class_name && class_name[0] != '*' && strcmp(class_name, ce->name))) {
+                               /* copy: enforce read only access */
+                               ALLOC_ZVAL(prop_copy);
+                               *prop_copy = **value;
+                               zval_copy_ctor(prop_copy);
+                               INIT_PZVAL(prop_copy);
 
-                       add_assoc_zval(return_value, prop_name, prop_copy);
+                               add_assoc_zval(return_value, prop_name, prop_copy);
+                       }
                }
                zend_hash_move_forward_ex(CE_STATIC_MEMBERS(ce), &pos);
        }
index 3bf8f77ec69b9f679c001ef9cac9cfce7122c850..e19db811881a5732cdb28c8f5d576464c7003799 100644 (file)
@@ -109,13 +109,12 @@ Array
 (
     [statPubC] => stat pubC in B
     [statProtC] => stat protC in B
-    [statPrivC] => stat privC in A
+    [statPrivC] => stat privC in B
     [statPubB] => stat pubB in B
     [statProtB] => stat protB in B
     [statPrivB] => stat privB in B
     [statPubA] => stat pubA in A
     [statProtA] => stat protA in A
-    [statPrivA] => stat privA in A
 )
 
 
@@ -146,13 +145,11 @@ Array
 (
     [statPubC] => stat pubC in C
     [statProtC] => stat protC in C
-    [statPrivC] => stat privC in A
+    [statPrivC] => stat privC in C
     [statPubB] => stat pubB in B
     [statProtB] => stat protB in B
-    [statPrivB] => stat privB in B
     [statPubA] => stat pubA in A
     [statProtA] => stat protA in A
-    [statPrivA] => stat privA in A
 )
 
 
@@ -195,4 +192,3 @@ Array
     [protC] => protC in X
     [privC] => privC in X
 )
-
index 70a3bab9c258e2f34ad7b837be0148199b08294e..082ef676cd0ba0d0a8a0f008a97ce2cdde643eb8 100644 (file)
@@ -67,11 +67,11 @@ Array
 )
 Array
 (
-    [privateOverridden] => new value 4
+    [privateOverridden] => new value 5
     [protectedOverridden] => new value 6
     [publicOverridden] => new value 7
 )
 
 Set non-existent values from A with no default value:
 Class A does not have a property named protectedOverridden
-Class A does not have a property named privateOverridden
\ No newline at end of file
+Class A does not have a property named privateOverridden
index 670427594bd191397bccf1cba79c7acf5e841ecd..7ce23b41e4a9f9f33dc65dca1359f1a6d6399028 100644 (file)
@@ -23,13 +23,9 @@ $m['data4'] = 400;
 var_dump($r->getStaticProperties());
 ?>
 --EXPECT--
-array(4) {
+array(2) {
   ["data2"]=>
   int(2)
   ["data3"]=>
   int(3)
-  ["data1"]=>
-  int(1)
-  ["data4"]=>
-  int(4)
 }