Mailinglisten-Archive |
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