Mailinglisten-Archive |
hi, mir ist folgendes aufgefallen, und ich wuerde gerne wissen, ob das ein bug oder feature ist: class KlasseA { function method() { KlasseB::method(); } } class KlasseB { function method() { if (isset($this)) { echo '$this ist gesetzt.<br>'; } else { echo '$this ist nicht gesetzt'; } } } Bei folgenden Aufrufen ist klar, wie die Ausgabe aussieht: KlasseB::method(); $obj = new KlasseB; $obj->method(); --------------------------------- $this ist nicht gesetzt. $this ist gesetzt. --------------------------------- ruft man aber folgendes auf: $obj = new KlasseA; $obj->method(); bekommt man trotzdem die ausgabe "$this ist gesetzt.". nach ein wenig debuggen musste ich feststellen, dass sich zu diesem momentan in $this die Instanz von KlasseA befindet. Hintergrund warum ich daruaf gestossen bin: ich wollte eine Methode load($id) implementieren, die wenn sie statisch aufgerufen wird (also isset($this)==false), als factorymethod reagiert, bzw. im objektkontakt aufgerufen wird, nur einige attribute in $this setzt... interessieren wuerde mich, woher dieses verhalten kommt... und ob es beabsichtigt ist... (handelt sich auf dem system, wo ich das gerade festgestellt habe im php 4.3.1). Gruss Thomas
php::bar PHP Wiki - Listenarchive