Schalter geschlossen ...
Zugriffsbeschränkungen
Andere OOP-Begriffe: Sichtbarkeit oder Datenkapselung

Das Wichtigste in Kürze
- Für alle Mitglieder eines Objekts können Zugriffsbeschränkungen definiert und somit die Beziehungen mit der "Aussenwelt" geregelt werden werden.
- Dies wird mit speziellen Schlüsselwörtern, den sog. Zugriffsmodifikatoren (engl. "access specifiers", "access modifiers" oder kurz "modifiers") vollzogen.
public zum Beispiel bedeutet, dass mit einem Mitglied von ausserhalb und innerhalb der Klasse gearbeitet werden kann, private hingegen bedeutet, dass auf das Mitglied nur innerhalb des Objektes zugegriffen werden kann.
- "Zwingt" man PHP dazu, aus einer "gesperrten Verwandtschaftsbeziehung" ein Mitglied anzusprechen, wird das Skript abgebrochen und eine Fehlermeldung (Fatal error) ausgegeben.
Übersichtstabelle Zugriffsmodifikatoren in PHP
| Zugriff (sichtbar) von... |
public |
protected |
private |
| ...gleicher Klasse |
 |
 |
 |
| ...vererbter Klasse |
 |
 |
 |
...einer anderen Klasse oder generell von "aussen" |
 |
 |
 |
- Um mit einer Metapher zu sprechen: Man kann sich eine Klasse als Amt mit verschiedenen Abteilungen vorstellen. Innerhalb des Amtes können die Abteilungen untereinander uneingeschränkt miteinander kommunzieren. Gegen aussen wird der Kontakt mit Kunden möglichst auf das Notwendigste beschränkt. Der Schalter (Zugriff) zu einer Abteilung (Mitglied) kann jederzeit (mit
protected oder private) geschlossen werden.
- Mit den Zugriffsbeschränkungen kann ein wichtiges Konzept der OOP - die (Daten-)Kapselung - umgesetzt werden: In einem Objekt soll nichts unkontrolliert gelesen oder verändert werden können und das interne Funktionieren des Objektes muss den User nichts angehen. Eine gute und einigermassen verständliche Beschreibung dieses Konzeptes findest du auf Wikipedia.
- Bei Projekten, die von mehreren Entwicklern vorangetrieben werden, kann ausserdem die Gefahr verkleinert werden, dass in Folge von Namensverwechslungen oder Denkfehlern Eigenschaften mit falschen Werten "gefüllt" oder überschrieben werden.
- In anderen Sprachen gibt es einen weiteren Modifikator,
internal. PHP kennt das Prinzip des package jedoch nicht, somit entfällt dieser Aspekt.
Merke dir folgende zwei PHP-Spielregeln:
- Bei der Deklaration einer Eigenschaft musst du immer einen Zugriffsmodifikator notieren.
- Bei der Definition einer Methode muss hingegen nicht unbedingt ein Modifikator stehen.
Eine Methode ohne Modifikator wird in PHP als public interpretiert.
Projektende: Kanalisieren von Beziehungen
Der Umgang mit Zugriffsbeschränkungen setzt bereits einen gewissen Überblick oder "Fernsicht" auf das Resultat bei der Programmierung eines Projekt voraus, was natürlich bei Einsteigern in die OOP nicht gegeben ist. Es ist ist jedoch nicht falsch, vorerst alle Methoden und Eigenschaften als "public" zu definieren. Deshalb mein Tipp:
- Deklariere zuerst alles mit
public, bis dein Projekt lauffähig ist.
- Gehe deinen Code am Schluss nochmals durch und frage dich dann, welche Eigenschaften und Methoden wo gebraucht und aufgerufen werden können/müssen.
- Schränke am Schluss die Zugriffsmöglichkeiten möglichst ein.