zend_hash_internal_pointer_reset_ex(&ce->function_table, &pos);
while (zend_hash_get_current_data_ex(&ce->function_table, (void **) &mptr, &pos) == SUCCESS) {
- if (!(mptr->common.fn_flags & ZEND_ACC_STATIC)) {
+ if ((mptr->common.fn_flags & ZEND_ACC_STATIC) == 0 &&
+ ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) == 0 || mptr->common.scope == ce)) {
zstr key;
uint key_len;
ulong num_index;
zend_hash_move_forward_ex(&ce->function_table, &pos);
}
string_printf(str, "\n%s - Methods [%d] {", indent, count);
+ if (!count) {
+ string_printf(str, "\n");
+ }
string_append(str, &dyn);
string_free(&dyn);
} else {
--- /dev/null
+--TEST--
+Reflection Bug #37964 (Reflection shows private methods of parent class)
+--FILE--
+<?php
+
+abstract class foobar {
+ private function test2() {
+ }
+}
+class foo extends foobar {
+ private $foo = 1;
+ private function test() {
+ }
+ protected function test3() {
+ }
+}
+class bar extends foo {
+ private function foobar() {
+ }
+}
+
+Reflection::export(new ReflectionClass(new bar));
+
+?>
+--EXPECTF--
+Class [ <user> class bar extends foo ] {
+ @@ %s %s
+
+ - Constants [0] {
+ }
+
+ - Static properties [0] {
+ }
+
+ - Static methods [0] {
+ }
+
+ - Properties [0] {
+ }
+
+ - Methods [2] {
+ Method [ <user> private method foobar ] {
+ @@ %s %d - %d
+ }
+
+ Method [ <user, inherits foo> protected method test3 ] {
+ @@ %s %d - %d
+ }
+ }
+}