OOP in PHP – Teil 7: Statische Methoden und Attribute

Statische Methoden wurden schon in mehreren früheren Artikeln erwähnt. Zeit, dass wir uns dieses Konstrukt mal genau ansehen. Was unterscheidet statische Methoden und Attribute nun von normalen?

Was sind statische Methoden und Attribute?

Kümmern wir uns zuerst um den Unterschied zwischen statischen und normalen Attributen. Definiere ich in einer Klasse ein Attribut wird für jedes Objekt eine Kopie dieser Variable im Speicher angelegt. Jedes Objekt besitzt also ein eigenes Attribut mit diesem Namen. Ein kleines Beispiel.

In der Ausgabe dieses Beispiels stellen wir fest, dass beide Objekte ihren festgelegten Namen bekommen. Irgendwo im Speicher wird also sowohl Hans als auch Max abgelegt und die Referenz in den Objekten zeigt jeweils auf einen anderen Abschnitt im Speicher.

Soweit kennen wir es ja schon. Doch nun zum eigentlichen Thema des Artikels: statische Attribute. Ein statisches Attribut zeichnet sich dadurch aus, dass es klassenübergreifend funktioniert. Klingt etwas kompliziert doch heißt für uns einfach nur, dass alle Objekte die aus dieser Klasse erzeugt wurden, auf dasselbe Attribut zugreifen. Schauen wir uns zuerst das Beispiel an.

Hier sieht die Sache nun anders aus. Das Erste, was uns auffallen sollte, ist die neue Ausgabe. Unsere Objekte geben nun beide den Namen Max aus. Daran sehen wir schon, dass in beiden Fällen auf denselben Wert im Speicher zugegriffen wird und dieser geändert wird. Da wir unser Objekt2 als letztes benennen wird dieser Name ab dann immer ausgegeben.

Wenden wir uns aber nun den technischen Feinheiten zu. Sowohl statische Methoden als auch statische Attribute werden – Überraschung – mit dem Schlüsselwort static definiert. Abgesehen davon gibt es technisch gesehen nur einen weiteren Unterschied: Anstatt mit dem Pfeiloperator -> greifen wir auf diese mit dem sogenannten Paamayim Nekudotayim zu (nein, ich bin nicht betrunken. Das ist hebräisch für Doppeldoppelpunkt. Wer den Namen ausgesucht hat war aber garantiert betrunken!).

Passiert das von innerhalb der Klasse – also innerhalb einer Methode, egal ob statisch oder nicht – können wir dafür das Schlüsselwort self verwenden. Dieses referenziert immer auf die eigene Klasse.

Außerhalb der Klasse (bei public Attributen und Methoden) benutzen wir einfach den Klassennamen. In unserem Beispiel von oben könnten wir also jederzeit das Attribut $name folgendermaßen verändern:

Im Gegensatz zum Pfeiloperator benötigen wir beim Doppeldoppelpunkt das $ Zeichen zum Zugriff auf Attribute.

Abgesehen davon gilt es nur noch zu beachten, dass wir in statischen Methoden das Schlüsselwort $this nicht benutzen können. Das macht natürlich Sinn, schließlich bezieht sich eine statische Methode nicht auf ein bestimmtes Objekt. Andersrum können wir self allerdings problemlos in einer normalen Methode benutzen, dieses bezieht sich immerhin auf die eigene Klasse und jedes Objekt wurde aus einer Klasse erzeugt.

2 Kommentare zu “OOP in PHP – Teil 7: Statische Methoden und Attribute

  1. Danke für die anschauliche Erklärung, wirklich verständlich.
    Rückfrage: Im Text wird erwähnt, dass die Methode statisch sei, im Code ist sie aber nicht als statisch deklariert. Oder wird eine Methode statisch dadurch, das sie eine statische Variable beherbergt?

    Danke schon mal und weiter so!
    Sebastian

    • Hi Sebastian,

      danke für das Kompliment. Freut mich dass hier jemand liest. 🙂
      Die Methoden im Beispiel sind nicht statisch, nur das Attribut. Auch eine statische Methode benötigt das Schlüsselwort static davor und wir danach mit dem :: Operator aufgerufen.
      Du hast Recht, das kommt nicht ganz rüber, den Artikel werde ich nochmal überarbeiten.

      Viele Grüße
      Frank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*