Hauptmenü

Untermenü

OOP mit PHP5 - Einstiegstutorial 3 - Die Abstract-Klasse Teil 1

1. Die Abschnitte

2. Der Konstruktor

Wieso benötigen wir bei dieser Klasse auch ein __construct? Den hatten wir doch schon in der MySQL.class.php? Ganz einfach, weil wir uns in diesem Beispiel ein wenig mit Vererbung beschäftigen. Die MySQL-Klasse hat zwar auch einen Konstruktor, der aber als protected gesetzt wurde. Normalerweise wird so ein Konstruktor auch dann automatisch aufgerufen, wenn man von der Kindklasse ein Objekt erstellt. Aber hier müssen wir ja noch die Zugangsdaten durchschleifen. Die Feinheiten dazu kommen hier unter Punkt 4.


class AbstractSQL extends MySQL
{           
  public function __construct ($host$user$password$database)
  {
    parent::__construct ($host$user$password$database);
  }
}

Hinweis

Wir wollen ja in diesem Fall eine "Abstraktionsschicht" in Form einer Klasse bauen, die die Kommunikation zwischen der Datei tutorial_3.php und der MySQL.class.php regelt. Daher rufen wir auch den Konstruktor der MySQL-Klasse über einen Konstruktor unserer "Abstrakt"-Klasse auf. Und der wird aufgerufen von der tutorial_3.php.

Erläuterung

parent::__construct macht nichts anderes als den Konstruktor der Elternklasse aufzurufen. Und der stellt dann die Verbindung zum MySQL-Server her und wählt die entsprechende Datenbank aus. Und die Zugangsdaten? Das kommt später.

3. Der Destruktor

Im Gegensatz zu den Zugangsdaten im Konstruktor wäre das hier doch eigentlich nicht nötig. Ist es aber (siehe folgenden Punkt).


public function __destruct ()
{
    parent::__destruct ();
}

4. Die Sache mit den Sichtbarkeitsstufen

So wie ich etliche von euch kenne, habt ihr euch natürlich nicht die Theorie durchgelesen. Auch wenn ich mich ungern wiederhole, so mache ich es ausnahmsweise. Wenn eine Elternklasse über einen Konstruktor oder Destruktor mit der Sichtbarkeit protected verfügt, die Kindklasse aber nicht, so passiert das hier.

Es wird ein Objekt aus der Kindklasse erzeugt. Da diese über keine der beiden magischen Methoden verfügt, so wird vom Objekt(!) automatisch der Konstruktor/Destruktor der Elternklasse aufgerufen. Und dann knallt es wegen der Sichtbarkeiststufe.

5. Ausnahmebehandlung

Wollen wir auch diesmal einbauen. Und zwar für alle Abfragen, die zwar keine MySQL-Fehlermeldung hervorrufen, trotzdem aber falsch sein können, da unter Umständen keine Datensätze von Änderungen betroffen sind. Falls noch nicht vorhanden, legt daher mal eine Datei namens dataexception.class.php an, packt sie in den class-Ordner und schreibt da nur folgendes hinein.


<?php
  class dataexception extends exception {}
?>

Wichtig!

Diese Datei nirgendwo einbinden, das kommt alles später noch. Da werdet ihr eine kleine Überraschung erleben!

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt