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

Reply via email to