For what it matters, the same thing in Java returns the expected result:

Class clazz = Foo.class;
Field fooProp = clazz.getDeclaredField("foo");
fooProp.setAccessible(true);
Bar bar = new Bar();
String value = (String)fooProp.get(bar);
System.out.println(value);

So is this a bug or some weird behavior I just don't understand yet?

Roman

On Apr 4, 2009, at 7:34 AM, Roman Borschel wrote:

Hi,

On Apr 4, 2009, at 1:53 AM, Johannes Schlüter wrote:

On Fri, 2009-04-03 at 22:37 +0200, Roman Borschel wrote:
Given the following simple classes

class Foo {
   private $foo = 'value';
   public function getFoo() { return $this->foo; }
}
class Bar extends Foo {}

Obviously, given an instance of Bar, say $bar, $bar->getFoo() returns
'value'.

Now the question: How do I get at this value using reflection, given
an instance of Bar?

class Foo { private $foo = "value"; }
class Bar extends Foo {}
$f = new Foo;
// we have to know the context, as there might be multiple foo properties
$r = new ReflectionProperty("Foo", "foo");
$r->setAccessible(true);
var_dump($r->getValue($f));

works for me.

johannes

Thanks for your answer. Yes, this works, but here $f is an instance of Foo, not Bar. When you make it an instance of Bar you get NULL. I think this is not correct, is it? Given that we have a ReflectionProperty of class Foo at hand, from my understanding it should look at an instance of Bar as a Foo and return the value. Am I missing something?

Regards

Roman


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to