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