OOP PHP5 - Grundlagen - Sichtbarkeit
1. Einführung
Erinnert ihr euch an den Geltungsbereich von Variablen in Funktionen. Da wo man auf Variablen nur in einem bestimmten Zusammenhang zugreifen konnte? Dies hier ist eine erweiterte Form der Zugriffsbeschränkung, die man selber steuern kann. Leider muss ich jetzt allen PHP4-Nutzern mitteilen, dass für sie an dieser Stelle endgültig Schluss ist. Alles, was hier folgt, gibt es erst seit PHP5.
2. Sichtbarkeit
Das bedeutet in diesem Zusammenhang, in wie weit Objekte auf Eigenschaften (Variablen) von Klassen zugreifen und sie verändern können. Oder ob sie die Methoden (Funktionen) von Klassen nutzen oder überschreiben können. Da gibt es drei Möglichkeiten:
public
kompletter Vollzugriffprotected
hier können nur die eigene Klasse und die "einbezogenen" Klassen darauf zugreifen (dazu später mehr)private
hier kann nur innerhalb der Klasse darauf zugegriffen werden
Wenn man das alte var
aus PHP4 bei Variablen (Eigenschaften) nimmt, so wird automatisch public
gesetzt.
Bei Funktionen muss man das auch nicht angeben, dann gilt dasselbe. Auch wenn ich von beiden Möglichkeiten dringenst abrate!
Setzt daher immer eine Sichtbarkeitsstufe. Das erhöht die Lesbarkeit des Codes.
3. Ein Beispiel
So, um seine Dörte nach allen Regeln der Kunst zu bezirzen, hat Dieter dank diverser Anleitungen aus dem Internet einen gaaanz tollen Liebesbrief geschrieben. Und der soll nun ganz analog an seine Angebetete verschickt werden. Damit das nun klappt, muss die Post eine Adresse und den Inhalt bekommen. Und da sie ihn nicht selber abholt, muss der noch in einen Briefkasten geworfen werden. Das sähe dann zum Beispiel so aus.
class BriefZustellen
{
public $adresse;
public $inhalt;
public function werfBriefEin()
{
...
}
}
So, damit wäre nun alles getan, was nicht in den Händen der Post liegt. Damit der Brief aber nun sein Ziel erreicht, bedarf es noch
einiger zusätzlicher Methoden und Eigenschaften. Und die kann man ruhig als private
deklarieren, weil das Objekt darauf
keinen Einfluss mehr haben sollte.
class BriefZustellen
{
public $adresse;
public $inhalt;
private $versendet;
public function werfBriefEin()
{
...
}
private function sortierBriefEin()
{
...
}
private function stellBriefZu()
{
...
}
}
4. Sinn und Zweck
Wozu denn nun dieses ganze Buhei? Ist es nicht einfacher, einen kompletten Vollzugriff zu erlauben, um flexibler zu sein? Nein.
private
heißt nicht so etwas wie "das geht dich einen Sch***dreck an", sondern es bedeutet "das ist etwas, um das
du dich nicht kümmern musst". Wenn Eigenschaften oder Methode ausschließlich für die interne Verarbeitung einer Klasse gedacht sind,
so kann das den Benutzern(!) dieser Klasse egal sein. Das hat den Vorteil, dass wenn diese Klasse umprogrammiert wird, der Nutzer seinen(!)
Code nicht anpassen muss.
5. protected
Um nun zu wissen, wann man damit arbeitet, muss man erst etwas über das Vererbungsprinzip wissen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt