Mailinglisten-Archive |
Yannik Hampe schrieb:
> P. Genna Privat wrote:
>
>> Hallo mal wieder,
>>
>> diesmal hab ich folgende Idee:
>> Wir haben das Objekt 'test' welches wiederum das Objekt 'text' haben
>> könnte, aber in diesem Fall nicht hat. Objekt 'text' hat die Methode
>> 'sprich'. Im Gedanken 'test' hätte 'text' rufen wir also:
>> 'test->text->sprich()'. Das hier die allseitsbeliebte Fehlermeldung
>> :'Call to a member function spich() on a non-object' erscheint, ist
>> verständlich.
>> Möglichkeiten hier wäre das Magische '__get()', damit könnte ich ja
>> ausfinden welches Objekt fehlt und dieses nachladen. Aber wie finde ich
>> raus welche Methode auf das Objekt ausgeführt werden sollte? Ist das
>> überhaupt möglich?
>>
>> <php
>> class test{
>> public function __get($name){
>> $this->$name = new $name;
>> #echo "Objekt $name ist nicht forhanden";
>> #hier hab ich das fehlende Objekt rein geladen, aber wie bekomme
>> ich die vorletzt aufgerufene Funktion?
>> }
>> }
>> class text{
>> public function sprich(){
>> echo "Mich wirst du so nie sehen";
>> }
>> }
>> $run = new test;
>> $run->text->sprich();
>> ?>
>>
>> Im Abschluss sei gesagt das es nur ein Gedankensprung ist. Wenn es nicht
>> geht ist es auch ok.
>> Dies ist eine Frage der Machbarkeit.
>>
>
> Klar geht das... Du hast es auch fast schon richtig gemacht. So ungefähr
> funktioniert das overloading, wenn du es manuell machen würdest:
>
> Aus
> ---
> echo $myObj->myProperty
> ---
> wird in php5
> ---
> if (isset($myObj->myProperty)) echo $myObj->myProperty;
> else echo $myObj->__get('myProperty');
> ---
> Mit anderen Worten: Die __get Funktion muss auch was zurückgeben. Der
> Wert den __get zurückgibt wird dann für die Eigenschaft genommen. Und
> dein __get gibt nichts zurück.
> Wenn du da einfach
> public function __get($name)
> {
> $this->$name = new $name;
> return $this->$name; //diese Zeile ist neu
> }
> hinzufügst, dann hast du's.
>
> Yannik
>
Das ist ja überaus entzückend.
Vielen dank Hans und Yannik, auf den 'return' wäre ich so schnell
nicht gekommen...
php::bar PHP Wiki - Listenarchive