behavior already adopted in ReflectionClass::getDefaultProperties() and ReflectionClass::getProperties().
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);
}
(
[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
)
(
[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
)
[protC] => protC in X
[privC] => privC in X
)
-
)
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
var_dump($r->getStaticProperties());
?>
--EXPECT--
-array(4) {
+array(2) {
["data2"]=>
int(2)
["data3"]=>
int(3)
- ["data1"]=>
- int(1)
- ["data4"]=>
- int(4)
}