Während normale Klassenvariablen bei jeder Objekterzeugung für das Objekt spezifisch neu angelegt werden, existieren auch statische Variablen innerhalb von Klassen, die nur einmal im gesamten Programm vorhanden sind. Sie ,,hängen“ sozusagen an der Klasse, statt an dem Objekt.
Neben den statischen Variablen stellt PHP auch statische Funktionen zur Verfügung, die sich innerhalb von Klassen befinden. Den statischen Funktionen ist zu eigen, dass diese nur auf die statischen Variablen und nicht auf die Objektvariablen zugreifen können.
Folgendes Beispiel verdeutlicht das Zusammenspiel von statischen Variablen und statischen Funktionen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php class Auto { static $anzahl = 0; public function __construct ($name) { $this->name = $name; self::$anzahl++; } public static function zugelasseneFahrzeuge () { echo ("Es wurden ".Auto::$anzahl." Fahrzeuge zugelassen."); } } $deinAuto = new Auto("Merzedes"); $meinAuto = new Auto("Opel"); echo ("Es wurden ".Auto::$anzahl." Fahrzeuge zugelassen."); Auto::zugelasseneFahrzeuge(); ?> |
Innerhalb der Klasse Auto
wurde eine öffentliche statische Variable namens $anzahl
eingefügt, um die sich in diesem Beispiel alles dreht. Dies geschieht, indem static
der Variable vorangestellt wird. Wird der Konstruktor aufgerufen, so wird diese Variable mit dem Aufruf self::$anzahl++
um eins erhöht, es wird also mitgezählt wie viele Fahrzeuge erstellt worden sind. Dabei ist self
ein Schlüsselwort und bezeichnet die Klasse selbst. Der Zugriff auf die Variable erfolgt nun nicht mehr mit dem Pfeil ->
, sondern über einen doppelten Doppelpunkt ::
. Gleichermaßen müssen Sie allerdings nicht unbedingt das Schlüsselwort self
nutzen, sondern Sie können auch über die Benennung der Klasse (hier: Auto
) auf die Variable zugreifen. Außerhalb müssen Sie dies natürlich tun, da self
nur innerhalb der Klasse verfügbar ist. Sie sehen dies in der echo
-Ausgabe außerhalb der Klasse. Auch statische Funktionen werden mit dem Wort static
versehen und können dann mit einem doppelten Doppelpunkt ::
statt mit einem Pfeil ->
, wie ihn die normalen Objektfunktionen nutzen, aufgerufen werden.
Die Ausgabe des kleinen Testprogrammes ist nun zweimal Es wurden 2 Fahrzeuge zugelassen.
Eine Klassenkonstante ist eine Variable in einer Klasse, die zur Laufzeit nicht mehr geändert wird. Sie steht also konstant fest. Um Konstanten von Variablen zu trennen, wird in PHP auf das $
-Zeichen zu Beginn des Konstantennamens verzichtet. Der Zugriff erfolgt wieder mit einem doppelten Doppelpunkt:
1 2 3 4 5 6 7 |
<?php class Auto { const today = 'heute'; } echo (Auto::today); ?> |
Das Beispiel gibt heute
aus.
Diese Definition von Konstanten ist von der Definition von Konstanten in einem nicht-objektorientierten Programm zu unterscheiden. Hier wird mittels define
gearbeitet:
1 2 3 4 5 6 |
<?php define('DEBUG',false); if (DEBUG) echo ("Debug Information"); ?> |