Cheatsheet Static Members

Es geht auch ohne Superheroes - einige Facts

  1. Statische Variablen gehören zur Klasse und nicht zu den Instanzen einer Klasse. Deshalb werden sie oft auch als Klassenvariablen bezeichnet.
  2. Statische Methoden gehören zur Klasse und (eigentlich) nicht zu den Instanzen einer Klasse. Deshalb werden sie oft auch als Klassenmethoden bezeichnet.
  3. Das Schlüsselwort static kommt nur bei Eigenschaften und Methoden zum Zug. Die ganze Klasse kann nicht mit static deklariert werden.
    Trotzdem findet man in einigen Tutorials die Bezeichnung "statische Klasse", was genau genommen falsch ist.
  4. Klassen mit statischen Mitgliedern werden in der Regel nicht instanziert. Der Weg über ein Objekt war zwar früher in PHP gang und gäbe, ich würde dir davon abraten.
  5. Klassen mit statischen Mitgliedern werden in der Regel nicht instanziert. Deshalb haben sie auch keine Konstruktormethode.
  6. Auf statische Mitglieder wird mit dem Gültigkeitsbereichsoperator :: zugegriffen. Der Objektoperator -> kann nicht verwendet werden.
  7. Innerhalb der Klasse kannst du nicht mit $this-> arbeiten. Statt dessen musst du mit self:: zugreifen oder aufrufen.
  8. static kannst du mit Zugriffsmodikatoren kombinieren, Beispiel:
    public static function myMethod()

Wofür braucht man das?

  1. Nicht alle Webentwickler:innen lieben Klassen mit statischen Mitgliedern. Einige raten sogar davon ab, solche einzusetzen.
  2. In vielen PHP-Frameworks werden Klassen mit statischen Mitgliedern dafür eingesetzt, um sog. Utility- oder Hilfs-Klassen anzubieten. Das sind Klassen, die allgemeine Problemstellungen lösen. Sie stehen deshalb auch oft gobal zur Verfügung.
  3. Anhänger:innen von Singleton-Entwurfsmuster (Singleton ist eine bestimmte Art von Klasse, die nur einmal instanziiert werden kann) brauchen Klassen mit statischen Mitgliedern.

Was sind die Nachteile?

  1. Einsteiger:innen in die OOP müssen sich mit einem (weiteren) Konzept herumschlagen, dass schwierig zu verstehen ist.
  2. Das Schlüsselwort static hat in PHP verschiedenene Bedeutungen, was das Ganze noch schwieriger macht.
  3. Unit-Testing geht nicht, Testen und Erweitern ist allgemein mühsam.