phpbar.de logo

Mailinglisten-Archive

[php] $this in verschiedenen kontexten

[php] $this in verschiedenen kontexten

Thomas Richter php at wwedit.org
Mit Nov 26 14:31:43 CET 2003


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