Public, Private, Protected in PHP: Warum Ihr Code ohne sie im Chaos versinkt
\n\nStellen Sie sich vor, Sie bauen ein Haus. Es gibt eine Eingangstür (jeder kann hinein), ein Schlafzimmer mit Schloss (nur für die Familie) und einen Safe in der Wand (nur Sie haben Zugang). In der Welt der objektorientierten Programmierung (OOP) mit PHP heißen diese „Türen“ und „Schlösser“ Zugriffsmodifikatoren.
\n\nWenn Sie schon einmal Klassen in PHP geschrieben haben, sind Sie sicher über die Begriffe public, private und protected gestolpert. Aber was bedeuten sie eigentlich? Warum kann man nicht einfach alles public machen und in Ruhe leben? Die Antwort ist einfach: Ohne sie wird Ihr Code zum öffentlichen Durchgangshof, in dem jedes Skript versehentlich die Programmlogik zerstören kann.
In diesem Artikel erklären wir die Zugriffsmodifikatoren in PHP anhand praktischer Beispiele, zeigen die Unterschiede auf und wie Sie sie für robusten, flexiblen Code einsetzen. Diese Anleitung basiert auf einer häufig gestellten Frage auf Stack Overflow und wurde für die Bildungsseite pythonlib.ru angepasst.
\n\nWas sind Zugriffsmodifikatoren und warum braucht man sie?
\n\nZugriffsmodifikatoren sind Schlüsselwörter, die festlegen, von wo aus auf Eigenschaften und Methoden einer Klasse zugegriffen werden kann. Sie sind die Grundlage der Kapselung (einer der vier Säulen der OOP). Kapselung verbirgt die interne Struktur eines Objekts und schützt Daten vor falscher Verwendung.
\n\nIn PHP gibt es drei Zugriffsebenen:
\n\n- \n
- Public – für alle zugänglich (innerhalb und außerhalb der Klasse). \n
- Private – nur innerhalb der eigenen Klasse zugänglich. \n
- Protected – innerhalb der Klasse und in abgeleiteten Klassen (Vererbung) zugänglich. \n
Schauen wir uns jede Ebene an praktischen Beispielen an.
\n\nPublic: „Eintritt ohne Klopfen“
\n\nDer Modifikator public ist der offenste. Als public deklarierte Eigenschaften und Methoden können von überall gelesen und geändert werden: aus einer anderen Klasse, einem globalen Skript oder von überall sonst.
<?php\nclass Auto {\n public $marke = 'Toyota';\n\n public function hupen() {\n return 'Hup!';\n }\n}\n\n$meinAuto = new Auto();\necho $meinAuto->marke; // Toyota – funktioniert\n$meinAuto->marke = 'Honda'; // Ändern – funktioniert\necho $meinAuto->hupen(); // Hup!\n?>\n\nDas klingt praktisch, oder? Aber es gibt ein Problem. Stellen Sie sich vor, die Klasse Benutzer hat eine Eigenschaft public $passwort. Jeder externe Code könnte sie lesen und ändern. Das wäre eine Sicherheitskatastrophe.
Wann verwenden: Für Methoden, die Teil der öffentlichen API einer Klasse sind (z. B. getBenutzername()), oder für Konstanten.
Private: „Der Safe, den man nicht knacken kann“
\n\nDer Modifikator private ist das absolute Gegenteil von public. Eine Eigenschaft oder Methode ist nur innerhalb der Klasse zugänglich, in der sie deklariert wurde. Nicht einmal abgeleitete Klassen sehen die private-Member der Elternklasse.
<?php\nclass Bankkonto {\n private $kontostand = 1000;\n\n private function berechneZinsen() {\n return $this->kontostand * 0.05;\n }\n\n public function getKontostand() {\n return $this->kontostand;\n }\n\n public function wendeZinsenAn() {\n $this->kontostand += $this->berechneZinsen();\n }\n}\n\n$konto = new Bankkonto();\n// echo $konto->kontostand; // Fehler! Zugriff auf private Eigenschaft nicht möglich\n// echo $konto->berechneZinsen(); // Fehler! Zugriff auf private Methode nicht möglich\necho $konto->getKontostand(); // 1000 – funktioniert, weil die Methode public ist\n$konto->wendeZinsenAn();\necho $konto->getKontostand(); // 1050\n?>\n\nIn diesem Beispiel sind $kontostand und berechneZinsen() vor der Außenwelt verborgen. Wir steuern den Kontostand nur über die öffentlichen Methoden getKontostand() und wendeZinsenAn(). Das ist Kapselung in der Praxis.