Static - Statische Attribute und Methoden/Funktionen

In einer „normalen“ Klassen haben Attribute einen Wert pro Objekt. Sollte der Wert eines Attributes in einem Objekt verändert werden, hat dies keinen Einfluss auf das andere Objekt.

Beispiel:

Oops, an error occurred! Code: 201904220828140047be39

Die Attribute „firstName“ beider Objekte haben einen unterschiedlichen Wert. Für das erste Objekt den Wert „heinz“ und für das zweite Objekt den Wert „peter“.

Es gibt Situationen, in denen ein Attribut jedoch pro Klasse, also für jede Instanz gelten soll.


Ein klassisches Beispiel ist es, wenn das Objekt selbst die Anzahl der Instanzen zählen soll:



Oops, an error occurred! Code: 2019042208281422c75224

Bei beiden Ausgaben mittels echo wird die Zahl 3 ausgegeben, da das Attribut $instanceCount für alle Instanzen des Objektes gilt und sich überall ändern, wenn es in einer Instanz geändert wurde.


Neben statischen Attributen kann es auch statische Methoden geben. Diese werden nicht in der klassischen Objektnotation aufgerufen:



Oops, an error occurred! Code: 2019042208281411b67af3

sondern mit dem Klassennamen und :: anstand ->:



Oops, an error occurred! Code: 2019042208281400a2da63

Statische methoden werden meist genutzt um „lowlevel“ Funktionen in einem Klassennamesraum zu sammeln.

Beispiel:



Oops, an error occurred! Code: 201904220828140c34cf75

Eine weitere Verwendung ist das Singleton Pattern. Ein Singleton ist ein Objekt, von dem es nur eine Instanz geben darf. Dazu wird der Konstruktor des Objektes als „private“ deklariert und eine statische Methode liefert die Instanz:

Oops, an error occurred! Code: 20190422082814d42c19a6

Der Mailservice wird bei einer Skriptlaufzeit nur einmal benötigt, da er nur Arbeit verichtet, aber nicht wie ein Personenobjekt eine Identität hat. Im Beispiel wird bei jeder versendeten Mail der interne (nicht statische) Zähler der Maisl hochgesetzt. An der Ausgabe sieht man also, dass es sich tatsächlich um das selbe Objekt handelt.

Navigation