static

Aus php bar
Wechseln zu: Navigation, Suche

Dieser Artikel behandelt das Schlüsselwort static in der Objekt-Orientierten Programmierung unter PHP, also in Verbindung mit Methoden und Eigenschaften in Klassen und nicht für Variablen in Funktionen.

Mit dem Schlüsselwort static werden Methoden (ab PHP 5) oder Eigenschaften (ab PHP 4) einer Klasse als statisch deklariert.

Statisch heißt, dass diese Methoden oder Eigenschaften verwendet werden können, ohne dass ein Objekt aus der Klasse erzeugt wurde.

Statische Aufrufe von Methoden sind seit PHP 4 möglich, das Schlüsselwort static für die Deklaration von Methoden (nicht zu verwechseln mit statischen Variablen in Funktionen oder Methoden, die es bereits unter PHP 4 gab) wurde allerdings erst mit PHP 5 eingeführt.

In PHP 5 sind als statisch deklarierte Methoden oder Eigenschaften nicht in einem aus der Klasse erzeugten Objekt verfügbar, dementsprechend ist in diesen Methoden $this nicht definiert, und können nicht in abgeleiteten Klassen überschrieben werden.

Aufgerufen werden statisch deklarierte Methoden und Eigenschaften genau wie Klassen-Konstanten mittels des ::-Operators (auch 'Scope Resolution Operator' oder 'Paamayim Nekudotayim').

Beispiel PHP 5:

 class MeineKlasse
 {
     // statische Eigenschaft
     public static $statische_eigenschaft = 'statische Eigenschaft';
 
     // statische Methode
     public static function statischeMethode()
     {
         echo 'Statische Methode aufgerufen.';
10     }
11 }
12 
13 echo MeineKlasse::$statische_eigenschaft;
14 echo MeineKlasse::statischeMethode();


Ausgabe PHP 5:

statische Eigenschaft
Statische Methode aufgerufen.

Beispiel PHP 4:

 class MeineKlasse
 {
     // statische Methode
     function statischeMethode()
     {
         echo 'Statische Methode aufgerufen.';
     }
 }
 
10 echo MeineKlasse::statischeMethode();


Ausgabe PHP 4:

Statische Methode aufgerufen.

Konzeptionelle Probleme mit dem Objektmodell von PHP 4

Beim Erweitern einer Klasse und dem Überschreiben einer Funktion ist es häufig nötig, die ursprüngliche Funktion der Ausgangsklasse aufzurufen. Dafür wird in PHP die parent::-Schreibweise verwendet:

 class foo 
 {
     var $result;
 
     function doSomething($param)
     {
         $this->result = $param + 5;
     }
 }
10 
11 class bar extends foo
12 {
13     function doSomething($param)
14     {
15        parent::doSomething($param * 2);
16     }
17 }
18 
19 $bar = new bar();
20 $bar->doSomething(2);


Aufgrund der internen Implementierung von Objekten war es nötig, dass der parent::-Aufruf ebenso wie ein statischer Methodenaufruf funktioniert. Da die Zuweisung auf $this->result nun aber auf das Objekt in $bar angewendet werden soll, haben die PHP-Entwickler entschieden, dass bei einem statischen Methodenaufruf aus einem Objekt in der aufgerufenen Methode ein $this zur Verfügung steht, dies aber auf das aufrufende Objekt zeigt. Durch die neue Implementierung in PHP 5 ist dieses Verhalten nicht mehr notwendig, wurde aber aus Gründen der Abwärtskompatibilität beibehalten. Wenn man in PHP 5 eine Methode mit static kennzeichnet, wird jedoch kein $this definiert:

 class foo
 {
     function f1()
     {
         var_dump($this);
     }
 
     static function f2()
     {
10         var_dump($this);
11     }
12 }
13 
14 class bar
15 {
16     function call()
17     {
18         echo "In f1:\n";
19         foo::f1();
20         echo "In f2:\n";
21         foo::f2();
22     }
23 }
24 
25 $bar = new bar();
26 $bar->call();

Ausgabe durch PHP 5:

In f1:
object(bar)#1 (0) {
}
In f2:
NULL

Handbucheinträge