Mailinglisten-Archive |
Ulf Wendel wrote: > > Hallo! > > Ich bin etwas verwirrt, daß folgender Code keine Fehler meldet > (PHP4.01): > > <?php > class foo { > > var $bar = 0; > > function foo() { > $this->bar = 7; > echo $this->bar; > } > > } > > foo::foo(); > ?> > > Mit etwas gutem OO Willen verändert sich hier die Bedeutung von "::" hin > zu einem statischen Methodenaufruf. Ist das ein bekannter oder > unbekannter Seiteneffekt? Ich habe ja schon bemerkt das es kein Feature > sein kann: Hallo Ulf, tut mir leid das Du so lange auf eine Antwort warten mußtest. Der Operator "::" wurde geschaffen, um in einer überschriebenen Methode einer abgeleiteten Klasse die ursprüngliche Methode aus der Basisklasse aufzurufen. Die Mißbrauchsmöglichkeit, die Du beobachtest wird ermöglicht durch die automatische Generierung der Standardklasse $this durch PHP. Das es sich hierbei nicht um ein Objekt vom Typ foo handelt siehst Du, wenn Du auf bar mit $this->bar++ oder $this->anotherMethod() zugreift, oder schnell mal var_dump benutzt. Es liegt hier also kein statischer Methodenaufruf im eigentlichen Sinne vor. Der PHP :: Operator ist nicht gleich mit dem von C++! Das dennoch in der Vergangenheit gelegentlich das Wort "static" benutzt wurde ist eine kleine sprachliche Ungenauigkeit. Eigentlich solltest Du den Operator also nur in einer Klasse benutzen können. Das es auch außerhalb geht, scheint mir ein Zufall. Ulf
php::bar PHP Wiki - Listenarchive