Home » PHP » Einführung » Klassen

Objektorientierung in PHP: Wie sieht eine Klasse aus?

In PHP kann man objektorientiert Programmieren. Eine Klasse bzw. ein Objekt ist in erster Linie ein Namensraum und eine Ansammlung von zur Laufzeit generierten Variablen. Aber eine Klasse kann noch mehr, sie kann Funktionen enthalten. Die Funktionen können genutzt werden, um Variablen (vorzugsweise der eigenen Instanz bzw. des eigenen Objektes) zu manipulieren. Genau wie jede andere Funktion können diese Ausgaben erzeugen, Rechenoperationen durchführen oder mit anderen Funktionen arbeiten.

Aufbau einer Klasse

Die einfachste Art einer Klassendefinition zeigt folgendes Beispiel:
 
1 class Tester
2 {
3   function Tester()
4   {
5     echo 'Hallo, ich bin die Funktion Tester() der Klasse Tester, ' .
6          'man nennt mich auch Construtor.';
7   }
8 }
 
Die Klasse ist in diesem Zustand wenig spektakulär. Die Funktion Tester() hat hier eine besondere Bedeutigung, da sie genauso heisst, wie die Klasse selbst. Beim erstellen einer Instanz dieser Klasse wird diese Funktion automatisch aufgerufen. Sie kann verwendet werden, um die Variablen dieser Klasse entsprechend zu initialisieren. Ein Objekt bzw. die Instanz einer Klasse ist eine zur Laufzeit instanzierte Kopie einer Klasse. Jede Kopie, also jede Instanz einer Klasse, hat unabhängig von anderen Instanzen eigene Werte bei den Variablen, die diese Klasse verwalten kann. Um das ganze etwas zu konkretisieren, hier ein Beispiel:
  
 1 class Tester
 2 {
 3   var $ausgabe;
 4 
 5   function Tester($ausgabe)
 6   {
 7     $this->ausgabe = strtoupper($ausgabe);
 8   }
 9 
10   function get_ausgabe()
11   {
12     return $this->ausgabe;
13   }
14 }
15 
16 $test1 = new Tester('Hallo Welt!');
17 $test2 = new Tester('Hallo Sonne!');
18 
19 echo $test1->get_ausgabe() . ' - ';
20 echo $test2->get_ausgabe();
  
Dieses Script würde die Ausgabe "HALLO WELT! - HALLO SONNE!" erzeugen. Wie man sieht verwaltet also jede Instanz ihre eigenen Variablen. In diesem Beispiel taucht erstmals das Schlüsselwort var auf. Wie sich erahnen lässt, wird dieses verwendet, um einer Klasse per Definition zu "sagen", wie ihre Variablen heißen. Mit dem dem Zeigeroperator "->" kann die Klasse über die Variable $this auf ihre eigenen Variablen zugreifen. Die Variable $this funktioniert genauso wie in C oder Java. Anders als in C oder Java kann in der Funktion einer Klasse nicht direkt auf die Variablen derselben zugegriffen werden, die Verwendung von $this-> ist unumgänglich.

Im Beispiel sieht man außerdem, wie der Constructor verwendet wird. Über das Schlüsselwort new kann eine neue Instanz der Klasse erzeugt werden. Wie das funktioniert, sieht an im Beispiel. Falls der Constructor Parameter kennt, kann man diese genau wie beim Aufruf einer Funktion übergeben. Auf die Funktionen und Variablen einer Klasse kann man über den Namen der Variable zugreifen, welche auf die Instanz der Klasse zeigt. In unserem Beispiel als $test1 und $test2. Bezogen auf obiges Beispiel könnte man auf die Variable $ausgabe der Klasseninstanz von $test1 also wie folgt zugreifen:
 
1 echo $test1->ausgabe;
 
Dabei ist zu beachten, dass der Variable $ausgabe beim Zugriff über den Zeigeroperator kein Dollarzeichen vorangestellt werden muss.

Zugriffsbeschränkung

Im Gegensatz zu anderen Programmiersprachen ist es in PHP 4 nicht möglich Schlüsselwörter wie public, private oder protected zu verwenden. Der Zugriff auf Funktionen und Variablen ist also immer möglich, egal ob der Programmierer sich dies so gedacht hat.

Vererbung

Klassen können in PHP vererbt werden. Das heisst, dass eine neue Klasse auf einer bereits vorhanden basiert. Dabei übernimmt sie alle Funktionen und Variablen dieser Klasse. Funktionen einer geerbten Klasse können überschrieben, aber nicht gelöscht werden.

Eine neue Klasse könnte zum Beispiel von der oben gezeigten Tester-Klasse abgeleitet werden:
 
1 class Ausgeben extends Tester
2 {
3   function set_ausgabe($ausgabe)
4   {
5     $this->ausgabe = strtoupper($ausgabe);
6   }
7 }
 
Diese Klasse würde zusätzlich die Möglichkeit geben die $ausgabe zu setzen.