Folien



(letzte Synchronisation der PDF-Präsentation: 02.08.2017)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: 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-Code
  class 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-Code
  class 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-Code
class 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";