phpbar.de logo

Mailinglisten-Archive

[php] statischer Aufruf aus einer methode

[php] statischer Aufruf aus einer methode

Sebastian Mendel lists at sebastianmendel.de
Mon Jun 13 15:31:06 CEST 2005


Andreas Heigl wrote:
> Sebastian Mendel schrieb:
> 
>> Hi,
>>
>> wenn ich eine Methode statisch aus einem Objekt heraus aufrufe ist $this
>> gesetzt ... wie soll ich denn jetzt überprüfen ob die Methode statisch
>> oder im Objekt aufgerufen wurde?
>>
>>
>> class Klasse
>> {
>>     function methode()
>>     {
>>         Klasse::stMethode();
>>     }
>>
>>     function stMethode()
>>     {
>>         if ( isset( $this ) )
>>         {
>>             echo 'Objekt' . "\n";
>>         }
>>         else
>>         {
>>             echo 'Klasse' . "\n";
>>         }
>>     }
>> }
>>
>> $objekt = new Klasse();
>>
>> $objekt->Methode();
>> Klasse::stMethode();
>
> Deswegen ist eine Methode ENTWEDER statisch ODER nichtstatisch.
> In einer STATISCHEN Methode hast du keine Zugriff auf Instanzvariablen ---
> wenn keine Instanz da ist, macht das irgendwie sinn ;-) ---
> Geht nicht, funzt nicht, macht keinen Sinn...

aha ... aber was hat das mit meinem Problem zu tun? unter PHP 4 ist eben
eine Methode nicht "statisch oder nicht-statisch"


> Einzige Möglichkeit, das dennoch rauszufinden: debug_backtrace() ;-) da
> gibts ja den Eintrag des Typs, der entweder '::' ist (statischer Aufruf,
> kein $this) oder eben '->' (nicht statischer aufruf, $this existiert!).

debug_backtrace() für sowas zu verwenden ist wohl etwas ... naja ...

und $this existiert eben doch im ersteren Fall!


> Aber mir ist bisher noch keine Variante untergekommen, die ein solches
> Konstrukt benötigte ;-)

z. B.: eine Methode die selbst ein Objekt erzeugt wenn sie statisch
aufgerufen wurde und dann den Aufruf an diese Objekt weitergibt, sparrt
eine Zeile Code im Controller


> Und unabhängig vom Prinzipiellen: dein Beispiel wird in beiden fällen
> 'Klasse' ausgeben, weil du mit dem Aufruf 'Klasse::stMethode()' nicht die
> aktuelle Instanz nutzt, sondern eben wieder  die statische Methode aufrufst,
> die dann keine Instanz ist und daher wieder 'Klasse' ausgibt.

aha, und verrätst du mir in welcher PHP-Version das so ist?


-- 
Sebastian Mendel

www.sebastianmendel.de
www.sf.net/projects/phpdatetime | www.sf.net/projects/phptimesheet

php::bar PHP Wiki   -   Listenarchive