behavior already adopted in ReflectionClass::getDefaultProperties() and ReflectionClass::getProperties().
zend_u_unmangle_property_name(IS_UNICODE, key, key_len-1, &class_name, &prop_name);
prop_name_len = u_strlen(prop_name.u);
- /* 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.s && class_name.s[0] != '*' && u_strcmp(class_name.u, ce->name.u))) {
+ /* copy: enforce read only access */
+ ALLOC_ZVAL(prop_copy);
+ *prop_copy = **value;
+ zval_copy_ctor(prop_copy);
+ INIT_PZVAL(prop_copy);
- add_u_assoc_zval(return_value, IS_UNICODE, prop_name, prop_copy);
+ add_u_assoc_zval(return_value, IS_UNICODE, 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) {
[u"data2"]=>
int(2)
[u"data3"]=>
int(3)
- [u"data1"]=>
- int(1)
- [u"data4"]=>
- int(4)
}