Webentwicklung mal ganz einfach!
← Zurück zur Übersicht

PHP: Objektorientierung für Unorientierte - Teil 1

Publiziert am von Markus Hauser

Jeder kennt es: Mit der Zeit wird der Code immer länger und länger, bis irgendwann der Punkt erreicht ist, an dem einem alles über den Kopf wächst. Spätestens dann kommt man um objektorientierte Programmierung (kurz OOP) nicht mehr herum. Objektorientierte Programmierung? Das hab ich schon mal gehört, aber das ist doch sicher tierisch kompliziert... Nein, das ist es nicht. Sind Grundkenntnisse des Programmierens vorhanden, so hilft OOP die Arbeit zu erleichtern, Zeit zu sparen und vor allem die Nerven zu schonen. Doch wie kann man sich OOP vorstellen? Das möchte ich anhand eines Beispiels erklären.

Die Aufgabenstellung

Verschiedene Automarken und Typen sowie Farben sollen in einer Codepassage gelistet werden.

Variante 1: Direkte Ausgabe mit echo via Copy & Paste

Problem: Wenn sich die Werte oft ändern, ist ein Ausfüllen mittels Copy & Paste sehr aufwendig.

echo "Marke: Volvo";
echo "Typ: Kombi";
echo "Farbe: Blau";
echo "<br/>";
echo "Marke: Audi";
echo "Typ: Limosine";
echo "Farbe: Schwarz";
echo "<br/>";
echo "Marke: Trabant";
echo "Typ: Oldtimer";
echo "Farbe: Grau";

Variante 2: Erstellen einer Funktion die öfter hintereinander aufgerufen wird

Das Ergebnis ist das gleiche wie bei Variante 1. Zudem wird eine ganze Menge an Code gespart, welcher sich somit übersichtlicher gestaltet. Problem: Soll das selbe Auto öfter aufgerufen werden, muss immer die gesamte Funktion mit allen Parametern aufgerufen werden. Ziemlich unpraktisch wenn man so überlegt.

function autoEigenschaften($marke, $typ, $farbe) {
    echo "Marke: ".$marke;
    echo "Typ: ".$typ;
    echo "Farbe: ".$farbe;
    echo "<br />";
}
autoEigenschaften("Volvo", "Kombi", "Blau");
autoEigenschaften("Audi", "Limosine", "Schwarz");
autoEigenschaften("Trabant", "Oldtimer", "Grau");

Erklärung des objektorientierten Ansatzes

Anhand des Beispiels zeigt sich, dass die Varianten 1 und 2 beide nicht optimal sind. Was macht man also in seiner Not? Die Lösung lautet OOP! Die Haupteigenschaft von OOP ist eine "Klasse". Als Klasse kann man sich im oben genannten Beispiel ein Auto ohne irgendwelche Eigenschaften vorstellen, d. h. ohne Marke, ohne Typ und ohne Farbe. Es ist nur bekannt, dass es ein Auto ist. Zuerst wird eine Klasse definiert, diese kann man sich als Rohgerüst vorstellen.

class Car {
    public $brand = null;
    public $type = null;
    public $color = null;
}

PHP hat nun die Information, dass es sich um ein Auto handelt, welches eine beliebige Marke, einen beliebigen Typ und eine beliebige Farbe haben kann. Dies nennt man "Eigenschaften" eines Objektes. Die Eigenschaften (Marke, Typ, Farbe) sind standardmäßig mit "null" gefüllt, was als eine Art Reservierung zu verstehen ist. Damit das Ganze nun mit Informationen befüllt wird, muss in der Klasse definiert werden, was passieren soll wenn man sie aufruft. Dafür ist die Funktion "__construct" (zwei Unterstriche) zuständig. Diese ist von PHP vorgegeben und muss genauso heissen.

class Car {
    public $brand = null;
    public $type = null;
    public $color = null;

    public function __construct() {
        $this->brand = "Volvo";
        $this->type = "Kombi";
        $this->color = "Blau";
    }
}

Nun wird bei einem Aufruf des Objekts ein blauer Volvo Kombi angezeigt. Aber warum? Die verschiedenen Eigenschaften der Klasse werden in der "__construct()"-Funktion verändert. Dies passiert indem man "$this" gefolgt von "->" und der gewünschten Variable eingibt. "$this" steht hierbei für die aktuelle Klasse. Im Beispiel ist diese das Auto, also "Car". Mit dem "->" zeigt man auf die entsprechende Variable in der Klasse. Im Beispiel werden "$brand", "$type" und "$color" verwendet. In der zweiten Variable wird jedoch das $-Zeichen weggelassen. Also statt "$this->$brand" ist "$this->brand" einzugeben. Es geht aber noch besser:

class Car {
    public $brand = NULL;
    public $type = NULL;
    public $color = NULL;

    public function __construct($marke, $typ, $farbe) {
        $this->brand = $marke;
        $this->type = $typ;
        $this->color = $farbe;
    }
}

Dieser Code macht die Klasse flexibel. Somit können bei einem Aufruf verschiedene Eigenschaften zugewiesen werden. Das Beispiel gestaltet sich nun wie folgt:

Variante 3: Strukturierte Lösung des Beispiels durch Objektorientierung

class Car {
    public $brand = NULL;
    public $type = NULL;
    public $color = NULL;

    public function __construct($marke, $typ, $farbe) {
        $this->brand = $marke;
        $this->type = $typ;
        $this->color = $farbe;
    }
}

// Neues Auto erstellen
$car1 = new Car("Volvo", "Kombi", "Blau");

// Eigenschaften des Autos ausgeben
echo "Marke: ".$car1->brand;
echo "Typ: ".$car1->type;
echo "Farbe: ".$car1->color;
echo "<br/>";

// durch die Klasse bleibt das Auto vorhanden.
echo "Marke: ".$car1->brand;
echo "Typ: ".$car1->type;
echo "Farbe: ".$car1->color;
echo "<br/>";

// Und noch ein Auto
$car2 = new Car("Audi", "Limosine", "Schwarz");
echo "Marke: ".$car2->brand;
echo "Typ: ".$car2->type;
echo "Farbe: ".$car2->color;

In dieser Variante wurde eine Variable "$car1" definiert, die kein String, kein Integer oder etwas Derartiges ist. Sie ist ein "Objekt", das durch das Erzeugen der Klasse mit "new Car()" erstellt wurde. Die Variable hat nun die ganze Laufzeit über die Eigenschaften, welche bei der Deklaration "$car1 = new Car("Volvo", "Kombi", "Blau");" definiert wurden. Und weil es so viel Spaß macht, wurde auch noch ein 2. Auto eingetragen. Mit anderen Eigenschaften, aber dem selben Aufruf "$car2 = new Car("Audi", "Limosine", "Schwarz");". Das wars für Erste. Das nächste mal stehen Konstanten in der Klasse und das Ändern von Werten zur Laufzeit auf dem Plan.

← Zurück zur Übersicht
Eingeordnet in: PHP / MySQL
Lesezeichen: Permalink zum Beitrag

Kommentare

Es sind noch keine Kommentare vorhanden.

← Zurück zur Übersicht