phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?Mi=DFbrauch?= von ::

[php] =?iso-8859-1?Q?Mi=DFbrauch?= von ::

Ulf Wendel ulf_(at)_redsys.de
Mon, 26 Jun 2000 20:22:54 +0200


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