Mailinglisten-Archive |
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