Klassen in PHP definieren
Falls über diesem Text keine PDF-Präsentation zu sehen ist, wurde diese von Ihrem Browser direkt runtergeladen (wenn Sie z.B. mit Safari@Mac surfen). Sie könnnen zum Download auch hier klicken: Direktdownload PDF-Präsentation
Eine Klasse definiert, wie ein Objekt aussehen wird, nachdem es instanziiert (erzeugt …) worden ist.
Notationskonvention: Klassen werden immer großgeschrieben.
Syntax: Erzeugen einer Klasse in PHP
PHP-Codeclass Klassenname { //Attribute und Methoden }
$this->variable
Das Schlüsselwort $this (und der Zugriffsoperator -> (vgl. php-resource.de: Wie nennt sich der Pfeil … bei OOP) wird immer verwendet, wenn man Mitglieder (Methoden oder Eigenschaften) der Klasse innerhalb der Klasse selbst aufruft. $this ist ein reservierten Variablenname, der sich auf das aktuelle Objekt bezieht.
Sie verwenden $this also immer dann, wenn Eigenschaften/Anweisungen sich auf ein bestimmtes, instanziiertes Objekt beziehen sollen.
Beispiel:
PHP-Codeclass Hund { //Attribut (Eigenschaft) public $hungrig = 'Ich habe Hunger.'; // Methode public function fressen($nahrung) { $this->hungrig = 'Habe keinen so großen Hunger.'; } }
Hier bezeichnet $this das jeweils eigene Objekt. Würde man ein Objekt der Klasse Hund (z.B.: $hund_fritz) instanziieren und die Funktion fressen (genauer: $objekt->fressen) aufrufen, würde für das Objekt $hund_fritz die Variable “hungrig” (also: $hund_fritz->hungrig) entsprechend geändert.
Das lässt sich überprüfen, indem wir zwei Hund-Objekte instanziieren:
PHP-Code$rex = new Hund; $hasso = new Hund; // Hund rex bekommt etwas zu fressen, Hund hasso aber nicht $rex->fressen('Knochen'); // echo $hungrig; // führt zu einer Fehlermeldung "undefined variable" echo "Zustand von Rex: " . $rex->hungrig . "<br />"; // rex ist satt echo "Zustand von Hasso: " . $hasso->hungrig; // hasso ist hungrig
Übungen
Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).
Die aktuelle Übung können Sie hier als txt-File herunterladen.
***** Übungen: PHP/OOP - Klassen definieren *****
PHP/OOP_1-1: Einfache Klasse schreiben
1. Schreiben Sie eine Klasse "Kunde" mit dem Attribut "wohnort" (Initialwert: "Endingen").
2. Erstellen Sie ein Klassendiagramm mit Violet-UML.
PHP/OOP_1-2: Einfache Klasse schreiben + Methode
1. Schreiben Sie eine Klasse "Kunde" mit dem Attribut "wohnort" (Initialwert: Endingen). In der Klasse wird eine Methode namens wohnortAendern definiert. Diese Methode soll das Attribut "wohnort" für das jeweilige Objekt auf "Hamburg" ändern.
Überprüfen Sie die Lauffähigkeit, indem Sie zwei Objekte instanziieren und die Methode bei einem anwenden. Das geht so:
PHP-Code$herbert = new Kunde; $dieter = new Kunde; $herbert->wohnortAendern('Hamburg'); echo "Herbert wohnt in " . $herbert->wohnort . ".<br />\n"; echo "Dieter wohnt immer noch in " . $dieter->wohnort . ".";
2. Erstellen Sie ein Klassendiagramm mit Violet-UML.
PHP/OOP_1-3: Anspruchsvollere Methode "wohnortAendern"
1. Ändern Sie die Klasse aus Übung 2 so, dass die Methode einen beliebigen Wert für "wohnort" verarbeiten kann. Überprüfen Sie die Lauffähigkeit mit den Objekten aus Übung 2.
2. Ändern Sie das Klassendiagramm aus Übung 2 entsprechend.
PHP/OOP_1-4: Klasse nach UML-Klassendiagramm schreiben: Rechnung
Schreiben Sie die im Klassendiagramm 10phpoop/oopphp01-bild-rechnung-klasse.png abgebildete Klasse.
PHP/OOP_1-5: Klasse nach UML-Klassendiagramm schreiben: Fabrik
Schreiben Sie die im Klassendiagramm 10phpoop/oopphp01-bild-fabrik-klasse.png abgebildete Klasse. Die Methode "produktHerstellen" enthält nur die Anweisung echo "Neues Produkt hergestellt!";.
Überprüfen Sie die Funktionsfähigkeit, indem Sie ein Objekt "neueFabrik" instanziieren ( $neueFabrik = new Fabrik; ) und die drei verwendeten Methoden benutzen.
PHP/OOP_1-6: UML-Klassendiagramm nach Klasse erstellen
Erstellen Sie mit Violet-UML ein Klassendiagramm zu folgendem Listing:
PHP-Codeclass Auto { public $geschwindigkeit = 80; private $leistung = 200; private $farbe = 'rot'; public function aendereGeschwindigkeit($speed) { $this->geschwindigkeit = $speed; } public function leistungAusgeben() { return $this->leistung; } public function farbeAusgeben() { return $this->farbe; } } $kaefer = new Auto; $porsche = new Auto; $kaefer->aendereGeschwindigkeit(90); $porsche->aendereGeschwindigkeit(300); echo "Käfer fährt jetzt " . $kaefer->geschwindigkeit . "und hat die Leistung " . $kaefer->leistungAusgeben() . " und hat die Farbe " . $kaefer->farbeAusgeben() . ".<br />\n"; echo "Porsche fährt jetzt " . $porsche->geschwindigkeit . "und hat die Leistung " . $porsche->leistungAusgeben() . " und hat die Farbe " . $porsche->farbeAusgeben() . ".<br />\n";
