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