phpbar.de logo

Mailinglisten-Archive

[php] statischer Aufruf aus einer methode

[php] statischer Aufruf aus einer methode

Andreas Heigl a.heigl at wdv.de
Mon Jun 13 15:05:40 CEST 2005


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...

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!).

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

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.

Grüße

Andreas
-- 

wdv Medien & Kommunikation GmbH & Co. OHG
Mediendatenverarbeitung
Andreas Heigl
Siemensstrasse 6
61352 Bad Homburg
Germany
Telefon +49-(0)6172-670-185
Telefax +49-(0)6172-670-181
www.wdv.de



php::bar PHP Wiki   -   Listenarchive