Neben den bislang betrachteten Methoden, die auf einem Objekt
aufgerufen werden, gibt es als Alternative
Klassenmethoden, auch statische Methoden genannt.
Sie werden mit dem Schlüsselwort static als
solche ausgezeichnet. Diese Methoden können ausgeführt werden, ohne
dass ein Objekt der Klasse benötigt wird. Eine Klassenmethode wird
mit Klasse::methode() aufgerufen.
Beispiel 1.13: Klassenmethoden
<?php
class Klasse {
public static function methode() {
print "Klasse::methode() aufgerufen.\n";
}
}
Klasse::methode();
?>Klasse::methode() aufgerufen.
In einer als static deklarierten Methode kann
die Pseudovariable $this nicht verwendet
werden, da Klassenmethoden außerhalb des Objektkontexts operieren.
Zusätzlich zu den Instanzvariablen gibt es noch zwei weitere Möglichkeiten, Daten im Kontext einer Klasse zu speichern.
Klassenvariablen, auch statische
Variablen genannt, werden mit dem Schlüsselwort
static deklariert. Die Änderung des Inhalts einer
solchen Variablen in einem Objekt ändert den Inhalt in allen Objekten
der zugehörigen Klasse. Der Zugriff auf eine Klassenvariable erfolgt über
Klassenname::$variable.
Klassenkonstanten entsprechen Nur-Lese-Klassenvariablen,
die immer öffentlich (public) zugreifbar sind und
mit dem Schlüsselwort const deklariert werden.
Der Zugriff auf eine Klassenkonstante erfolgt über
Klassenname::konstante.
Beispiel 1.14: Klassenkonstanten und -variablen
<?php
class Klasse {
const konstante = 0;
public static $variable = 1;
public function inc() {
return self::$variable++;
}
}
$a = new Klasse;
$b = new Klasse;
print 'Klasse::konstante = ' . Klasse::konstante . "\n";
print '$a->inc() = ' . $a->inc() . "\n";
print '$b->inc() = ' . $b->inc() . "\n";
?>Klasse::konstante = 0 $a->inc() = 1 $b->inc() = 2
Erfolgt der Zugriff auf eine Klassenmethode, eine Klassenvariable oder eine
Klassenkonstante aus einer Methode derselben Klasse heraus, so kann
alternativ self::methode(),
self::$variable beziehungsweise
self::konstante verwendet werden. Das
Schlüsselwort self bezieht sich stets auf den
Sichtbarkeitsbereich der zur Methode gehörigen Klasse.
In einem UML-Klassendiagramm werden Klassenmethoden und Klassenvariablen unterstrichen, um sie von den Instanzmethoden und Instanzvariablen abzusetzen.