phpbar.de logo

Mailinglisten-Archive

[php] PHP5 overloading

[php] PHP5 overloading

Kai Meder ml at kai.meder.info
Fre Okt 14 22:49:19 CEST 2005


ich komme einfach nicht weiter.

dieser test-case funktioniert fehlerfrei, wie natürlich zu erwarten ist:

class OverloadingDispatcher
{
function __get($name)
     {
     return call_user_func(array($this , "get{$name}"));
     }
}


class Root extends OverloadingDispatcher
{
protected $a;

function __construct()
     {
     $this->a = new A();
     }

function getA()
     {
     return $this->a;
     }
}

class A extends OverloadingDispatcher
{
protected $b;

function __construct()
     {
     $this->b = new B();
     }

function getB()
     {
     return $this->b;
     }
}

class B extends OverloadingDispatcher
{
protected $c;

function __construct()
     {
     $this->c = new C();
     }

function getC()
     {
     return $this->c;
     }
}

class C
{
function sayHello()
     {
     echo 'hello world!';
     }
}

$r = new Root();
$r->a->b->c->sayHello();

funktioniert ...
hier hängt sich php auch *nicht* an den protected properties auf ...

für heute wars das, hoffe jemand kann mir weiterhelfen ...
gruß,
kai


Kai Meder wrote:
> hallo zusammen,
> 
> kennt jemand das problem
> "Fatal error: Cannot access protected property Radix_Context::$user in 
> <file> on line <line>"
> beim benutzen von overloading mittels __get() ?
> 
> aufruf:
> $this->context->user->attributes->userID = 1;
> 
> $this->context ist eine klasse mit der protected property $user.
> anstatt die overloading methode __get aufzurufen, hängt sich php immer 
> an $user auf ... obwohl es protected ist! sobald ich die property auf 
> $_user ändere, funktioniert es aber er hängt sich an der nächsten 
> property attributes auf ...
> 
> $db = $this->context->database; funktioniert jedoch. für database wird 
> korrekterweise __get aufgerufen und es ist genauso eine protected 
> property wie user ...
> 
> habe das ganze auch schnell mit paar zusammengehackten klassen 
> gegentesten, prinzipiell hat php mit diesem chaining von __get-aufrufen 
> keine probleme ...
> 
> hat jemand irgendeinen rat?
> kai

php::bar PHP Wiki   -   Listenarchive