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