Klassenmethoden, Klassenvariablen und Klassenkonstanten

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.

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.