# 5.1 Warum Objektorientierung

Es gibt tausende Texte, die die Gründe für die Objektorientierung fachlich korrekt und mit vielen Fremdwörtern beschreiben. In der nachfolgenden Beschreibung geht es um eine möglichst einfache und nachvollziehbare Beschreibung, bei der das Gesamtverständnis wichtiger ist als die fachlichen Begrifflichkeiten. Lesen Sie sich die Beschreibung einmal sorgfältig durch.

Mit den Funktionen (= Unterprogramme, function) können wir in PHP schon vieles machen:

- Funktionen mehrfach nutzen und somit duplizierten Sourcecode einsparen.
- Funktionen in eine andere Datei auslagern, damit das Hauptprogramm übersichtlich wird.
- Funktionen "ineinander verschachteln", sodass Funktionen andere Funktionen aufrufen.

Was aber bislang nicht optimal ist:

- Wir können alle Funktionen direkt aus dem Hauptprogramm aufrufen und haben keinen Schutz davor, dass eine "Unterfunktion" aus dem Hauptprogramm eigentlich gar nicht aufgerufen werden soll. Denn bisher sind alle Funktionen von überall aus nutzbar.

- Wir können die Funktionen nicht zu einem "größeren Ganzen" zusammenfassen (also quasi zusammengehörige Funktionen in einen "Behälter" stecken).

- Wenn wir diese "Behälter" hätten, dann könnten wir diesem Satz an Funktionen auch Eigenschaften zuweisen, die nur genau für diese Funktionen gelten.
- Wenn wir diese "Behälter" hätten und Eigenschaften hätten, dann könnten wir beim ersten Aufruf auch gleich ein paar Werte mitgeben, die von den enthaltenen Funktionen genutzt werden könnten.
- Es geht zwar, dass Funktionen andere Funktionen aufrufen können, aber es geht nicht, dass ein "ganzer Satz zusammengehöriger Funktionen" einen anderen "Satz von Funktionen" aufruft.

Fazit: uns fehlt eine Möglichkeit Funktionen zusammenzufassen. Also ein "Behälter", der alle zusammengehörige Funktionen "bündelt" (kapselt). Diesen "Behälter" nennen wir "Klasse".

In allen bisherigen Beispielen konnten wir mit den Funktionen (= Unterprogramme, function) gut arbeiten und haben auch nichts vermisst. Aber wenn die Programmieraufgaben größer werden (viel größer werden!), dann würden wir die aufgeführten Punkte vermissen.

## Objektorientierung

Wir fassen zusammengehörige Funktionen nun zusammen zu einer Klasse (also einem Behälter in dem sich die Funktionen befinden). Die Funktionen in der Klassen nennen wir nun Methoden, denn es sind Funktionen, die nicht unbedingt überall sichtbar sind (= nicht von überall aufgerufen werden können).

Anmerkung

Für die "Funktionen" in den Klassen gelten gegenüber normalen Funktionen einige Besonderheiten (z.B. nicht von überall aufrufbar) und daher wählen wir für diese Funktionen eine eigene Bezeichnung und nennen diese Funktionen nun Methoden.

So wie jede einzelne Funktion auch eigene Variablen haben kann, führen wir auch Variablen in der Klasse ein. Diese Variablen einer Klasse nennen wir Eigenschaften oder auch Attribute. Auch hier ändern wir wieder den Namen, da die Eigenschaften einer Klasse auch nicht unbedingt überall sichtbar sind (= nicht von überall aufgerufen werden können).

Anmerkung

Für die "Variablen" in den Klassen gelten gegenüber normalen Variablen einige Besonderheiten (z.B. nicht von überall aufrufbar) und daher wählen wir für diese Variablen eine eigene Bezeichnung und nennen diese Variablen nun Eigenschaften.

Das neue Konzept ist also, dass wir Funktionen zu einer Klasse zusammenfassen (dann sind es die Methoden der Klasse) und dieser Klasse auch Variablen geben (die Eigenschaften der Klasse).

## Aufruf von Funktionen und Klassen

Wenn wir Funktionen verwenden wollen, dann nutzen wir hierfür einen Funktionsaufruf, z.B. `add($a, $b);`.

Wenn wir Methoden verwenden wollen, dann müssen wir dem Hauptprogramm zuerst mitteilen, in welcher Klasse diese sich befinden und eine Klasse aufrufen. Den Aufruf einer Klasse nennen wir instanzieren. Damit kann eine Klasse verwendet werden. Nun folgt die genaue PHP-Syntax auf den nächsten Seiten.