mirror of
https://github.com/php/php-src.git
synced 2024-11-27 20:03:40 +08:00
- Fixed bug #45571 (ReflectionClass::export() shows superclasses' private static methods.)
patch by Robin Fernandes
This commit is contained in:
parent
3d0d02f95b
commit
a83e976857
@ -417,7 +417,7 @@ static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *in
|
||||
|
||||
/* Static methods */
|
||||
if (&ce->function_table) {
|
||||
/* counting static properties */
|
||||
/* counting static methods */
|
||||
count = zend_hash_num_elements(&ce->function_table);
|
||||
if (count > 0) {
|
||||
HashPosition pos;
|
||||
@ -426,14 +426,15 @@ static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *in
|
||||
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
|
||||
&& ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) == 0 || mptr->common.scope == ce)) {
|
||||
count_static_funcs++;
|
||||
}
|
||||
zend_hash_move_forward_ex(&ce->function_table, &pos);
|
||||
}
|
||||
}
|
||||
|
||||
/* static properties */
|
||||
/* static methods */
|
||||
string_printf(str, "\n%s - Static methods [%d] {", indent, count_static_funcs);
|
||||
if (count_static_funcs > 0) {
|
||||
HashPosition pos;
|
||||
@ -442,7 +443,8 @@ static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *in
|
||||
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
|
||||
&& ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) == 0 || mptr->common.scope == ce)) {
|
||||
string_printf(str, "\n");
|
||||
_function_string(str, mptr, ce, sub_indent.string TSRMLS_CC);
|
||||
}
|
||||
|
40
ext/reflection/tests/bug45571.phpt
Normal file
40
ext/reflection/tests/bug45571.phpt
Normal file
@ -0,0 +1,40 @@
|
||||
--TEST--
|
||||
Bug #45571 (ReflectionClass::export() shows superclasses' private static methods.)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
Class A {
|
||||
static private $a = 0;
|
||||
static protected $b = 1;
|
||||
static public $c = 2;
|
||||
|
||||
private function f() {}
|
||||
private static function sf() {}
|
||||
}
|
||||
|
||||
Class C extends A { }
|
||||
|
||||
ReflectionClass::export("C");
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Class [ <user> class C extends A ] {
|
||||
@@ %s 12-12
|
||||
|
||||
- Constants [0] {
|
||||
}
|
||||
|
||||
- Static properties [2] {
|
||||
Property [ protected static $b ]
|
||||
Property [ public static $c ]
|
||||
}
|
||||
|
||||
- Static methods [0] {
|
||||
}
|
||||
|
||||
- Properties [0] {
|
||||
}
|
||||
|
||||
- Methods [0] {
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user