phpbar.de logo

Mailinglisten-Archive

[php] Letzte aufgerufene Funktion?

[php] Letzte aufgerufene Funktion?

Yannik Hampe yannik at cipher-code.de
Mit Jun 4 12:36:05 CEST 2008



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

php::bar PHP Wiki   -   Listenarchive