phpbar.de logo

Mailinglisten-Archive

[php] Letzte aufgerufene Funktion?

[php] Letzte aufgerufene Funktion?

P. Genna Privat genna.p.p at tat-world.de
Mit Jun 4 13:46:14 CEST 2008


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