Hello Jochem, Friday, December 23, 2005, 1:28:36 PM, you wrote:
> if I have an object with a given base class and it > has an object as a property which has the same base class > should I or should I not be able to call a protected method > on the contained (delegated) from the first (container) object? of course not it is a different object. If we had subclasses this would be different. > currently I am not able to do what I thought should work, below > is an example which hopefully makes it clear what i'm going on about. Just to make this clear: your code as given below must fail because it violates visibility/inheritance rules. > if this behaviour is expected I'd be very grateful if anyone > could shed some light on why. The problem is that we neither have 'friend' which would help you here nor do we have a second visibility rule set (however no other language supports that) and also programming languages do support grant models like databases do. > kind regards, > Jochem $>> php -r ' > abstract class A { > function test() { $this->doit(); } > protected function doit() { echo "A\n"; } > } > class B extends A { > protected function doit() { parent::doit(); echo "B\n"; } > } > class C extends A { > function __construct() { $this->delegate = new B; } > protected function doit() { $this->delegate->doit(); echo "C\n"; } > /* > the problem can be solved here by chaing the preceeding line of code to: > protected function doit() { $this->delegate->test(); echo "C\n"; } > but that does not solve the realworld issue I had regarding this :-) > */ > } > $b = new B; $c = new C; > $b->test(); > $c->test(); > ' > A > B > Fatal error: Call to protected method B::doit() from context 'C' in Command > line code on line 5 Best regards, Marcus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php