studyklar
IProg · Skript 5 · Abschnitt 6

Klassen in PHP: Konstruktor, Destruktor, __toString

Eine Klasse ist ein Bauplan: Sie legt fest, welche Daten (Attribute) und welche Methoden jedes Objekt hat. Hier steht, wie das in PHP aussieht und wann PHP Konstruktor, Destruktor und __toString von selbst aufruft. Rechts laufen die Beispiele mit ihrer echten Ausgabe. Mit Weiter geht es Schritt für Schritt voran.

Worum es geht

Skript 05, Folien 19–25: Objektorientierung in PHP, Beispiel Klasse Hotel, wichtige Konzepte, Demo 04_construct.php (Fotos auf Folien 21 und 22).

Wie schreibt man in PHP eine Klasse und erzeugt Objekte daraus? Was ist anders als in Java? Und in welcher Reihenfolge laufen Konstruktor und Destruktor, wenn Objekte entstehen und verschwinden?

Merke: Ein Objekt ist ein Exemplar einer Klasse. Ein Attribut ist eine Variable, die jedes Objekt für sich hat; eine Methode ist eine Funktion der Klasse.

So gehen wir vor:

  1. Was PHP an Objektorientierung bietet.
  2. Die Klasse Hotel von der Folie: Attribute und Konstruktor.
  3. Objekte erzeugen, Methoden aufrufen, private und Typen.
  4. Die Demo aus der Vorlesung Zeile für Zeile: Konstruktor, Destruktor, __toString.
  5. Eine Klausurfrage dazu.

Objektorientierung in PHP

Skript · Folie 19

PHP wurde nicht als objektorientierte Sprache entwickelt; völlig neues oo Modell ab Version 5, vieles an Java angelehnt.

PHP war ursprünglich keine objektorientierte Sprache. Seit Version 4 kamen Klassen dazu, mit Version 5 ein ganz neues Modell, das sich stark an Java anlehnt.

Die Tabelle zeigt die Konzepte von Folie 19. Die Sichtbarkeit (wer ein Attribut oder eine Methode benutzen darf) regeln public, protected und private genau wie in Java. protected erlaubt zusätzlich den Zugriff aus Klassen, die erben (so die Notiz auf Folie 20). const legt eine Konstante fest, deren Wert sich nicht mehr ändern lässt, wie final in Java. Reflection heißt: Ein Programm kann zur Laufzeit abfragen, welche Eigenschaften ein Objekt hat.

static heißt: Die Methode gehört zur Klasse, nicht zu einem Objekt. Man ruft sie mit Klasse::methode() auf, ohne vorher ein Objekt zu erzeugen.

Aus Klausur 3, Aufgabe 6 („PHP-Klasse ArtikelDB: Artikel anlegen und nach Warengruppe lesen“): Dort ist findByWgruppe($db, $wg) eine static-Methode der Klasse ArtikelDB.

Die Klasse Hotel

Skript · Folie 23

Beispiel: Klasse mit PHP, Deklaration.

class Hotel {  private $name;  private int $zimmer = 0;   public function __construct($n, $z = 0) {    $this->name = $n;    $this->zimmer = $z;  }

class Hotel beginnt die Klasse. Sie hat zwei Attribute: $name und $zimmer. Beide sind private: Nur Methoden der Klasse selbst dürfen sie lesen und ändern.

Der Konstruktor heißt in PHP immer __construct, mit zwei Unterstrichen vorn; in Java trägt er den Namen der Klasse. PHP ruft ihn bei jedem new auf. Hier ist $z = 0 ein Default-Wert.

$this ist das Objekt, das gerade gebaut wird. $this->name ist sein Attribut name. Der Pfeil -> steht da, wo Java einen Punkt schreibt; das $ vor name fällt hinter dem Pfeil weg.

Noch 13 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1Klassen und Objekte

die Klasse Hotel

PHP 5 bietetVergleich mit Java
Konstruktoren und DestruktorenDestruktoren gibt es in Java nicht
Sichtbarkeit: public, protected, privatewie in Java
static Methoden und Attributewie in Java
Konstanten mit constin Java: final (Wert lässt sich nicht mehr ändern)
Vererbung mit extendswie in Java
interfaceswie in Java
Reflection: Eigenschaften eines Objekts abfragengibt es auch in Java
LegendeZeilen des SchrittsDie Konzepte der Objektorientierung in PHP, mit dem Vergleich zu Java.