ID:               48286
 User updated by:  Markus dot Lidel at shadowconnect dot com
 Reported By:      Markus dot Lidel at shadowconnect dot com
 Status:           Bogus
 Bug Type:         Reflection related
 Operating System: *
 PHP Version:      5.*, 6CVS (2009-05-14)
 New Comment:

This patch resolves the problem and display redeclared properties in
the class where it is defined.

--- php_reflection.c.ori        2008-12-31 12:17:42.000000000 +0100
+++ php_reflection.c    2009-05-15 02:04:51.000000000 +0200
@@ -4125,6 +4125,10 @@
                        break;
                }
                ce = tmp_ce;
+               if (ce == tmp_info->ce) {
+                       /* it's a redeclared property, so no further
inheritance needed */
+                       break;
+               }
                tmp_ce = tmp_ce->parent;
        }


Previous Comments:
------------------------------------------------------------------------

[2009-05-14 22:19:52] Markus dot Lidel at shadowconnect dot com

Thank you for you fast response.

But how do you find out, if the property is redeclard in a derived
class?

Note: ReflectionProperty::getDeclaringClass() also displays A if
property is static. Shouldn't getDeclaringClass() in this case display
the class from which the value is retrieved?

BTW, ReflectionMethod::getDeclaringClass() works as expected (displays
B). Although i don't know the internals, it is a bit confusing that two
identically named functions behave differently.

------------------------------------------------------------------------

[2009-05-14 21:51:55] [email protected]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

It is declared in A, the 2nd declaration has no actual effect when the
class is being bound.

------------------------------------------------------------------------

[2009-05-14 20:29:15] Markus dot Lidel at shadowconnect dot com

Description:
------------
ReflectionProperty::getDeclaringClass() called on derived properties
always return the class where the property was first defined, instead of
the class where the property was redeclared. If $prop is private it
works. (properly related to #39104)

Reproduce code:
---------------
class A
{
  protected $prop;
}

class B extends A
{
  protected $prop;
}

$rp = new ReflectionProperty('B', 'prop');
echo $rp->getDeclaringClass()->getName();


Expected result:
----------------
B

Actual result:
--------------
A


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=48286&edit=1

Reply via email to